On Wed, Feb 11, 2015 at 09:44:24AM -0800, Mike Stump wrote: > On Feb 11, 2015, at 4:24 AM, Marek Polacek <pola...@redhat.com> wrote: > > > > The following patch splits the test into C and C++ test cases, so > > hopefully fixing the issue. Ok for trunk? > > > > 2015-02-11 Marek Polacek <pola...@redhat.com> > > > > * g++.dg/ubsan/shift-1.C: New test. > > * gcc.dg/ubsan/c-shift-2.c: New test. > > * c-c++-common/ubsan/shift-5.c: Remove file. > > > > diff --git gcc/testsuite/g++.dg/ubsan/shift-1.C > > gcc/testsuite/g++.dg/ubsan/shift-1.C > > index e69de29..8a71279 100644 > > --- gcc/testsuite/g++.dg/ubsan/shift-1.C > > +++ gcc/testsuite/g++.dg/ubsan/shift-1.C > > @@ -0,0 +1,37 @@ > > +/* { dg-do compile } */ > > +/* { dg-options "-fsanitize=shift -w" } */ > > +/* { dg-shouldfail "ubsan" } */ > > + > > +int > > +foo (int x) > > +{ > > + /* None of the following should pass. */ > > + switch (x) > > + { > > + case 1 >> -1: > > +/* { dg-error "is not a constant expression" "" { xfail { *-*-* } } 11 } */ > > Never include line numbers, unless there is no other way. Here, I think you > can drop it, and merely ensure this is on the right line? > > An example from gcc.dg: > > int g2(int a; __attribute__((unused))); /* { dg-error "just a forward > declaration" "no parms" { xfail *-*-* } } */ > > I’m hoping that style will work.
Yeah, it works, I don't know why I changed it for the C test case, but not for the C++ one. > Ok with the above fixes, if applicable. Thanks. 2015-02-11 Marek Polacek <pola...@redhat.com> * g++.dg/ubsan/shift-1.C: New test. * gcc.dg/ubsan/c-shift-2.c: New test. * c-c++-common/ubsan/shift-5.c: Remove file. diff --git gcc/testsuite/g++.dg/ubsan/shift-1.C gcc/testsuite/g++.dg/ubsan/shift-1.C index e69de29..05e049e 100644 --- gcc/testsuite/g++.dg/ubsan/shift-1.C +++ gcc/testsuite/g++.dg/ubsan/shift-1.C @@ -0,0 +1,31 @@ +/* { dg-do compile } */ +/* { dg-options "-fsanitize=shift -w" } */ +/* { dg-shouldfail "ubsan" } */ + +int +foo (int x) +{ + /* None of the following should pass. */ + switch (x) + { + case 1 >> -1: /* { dg-error "is not a constant expression" "" { xfail { *-*-* } } } */ + case -1 >> -1: /* { dg-error "is not a constant expression" "" { xfail { *-*-* } } } */ + case 1 << -1: /* { dg-error "is not a constant expression" "" { xfail { *-*-* } } } */ + case -1 << -1: /* { dg-error "is not a constant expression" "" { xfail { *-*-* } } } */ + return 1; + } + return 0; +} + +int +bar (int x) +{ + /* None of the following should pass. */ + switch (x) + { + case -1 >> 200: /* { dg-error "is not a constant expression" "" { xfail { *-*-* } } } */ + case 1 << 200: /* { dg-error "is not a constant expression" "" { xfail { *-*-* } } } */ + return 1; + } + return 0; +} diff --git gcc/testsuite/gcc.dg/ubsan/c-shift-2.c gcc/testsuite/gcc.dg/ubsan/c-shift-2.c index e69de29..beb0dbe 100644 --- gcc/testsuite/gcc.dg/ubsan/c-shift-2.c +++ gcc/testsuite/gcc.dg/ubsan/c-shift-2.c @@ -0,0 +1,31 @@ +/* { dg-do compile } */ +/* { dg-options "-fsanitize=shift -w" } */ +/* { dg-shouldfail "ubsan" } */ + +int +foo (int x) +{ + /* None of the following should pass. */ + switch (x) + { + case 1 >> -1: /* { dg-error "case label does not reduce to an integer constant" } */ + case -1 >> -1: /* { dg-error "case label does not reduce to an integer constant" } */ + case 1 << -1: /* { dg-error "case label does not reduce to an integer constant" } */ + case -1 << -1: /* { dg-error "case label does not reduce to an integer constant" } */ + return 1; + } + return 0; +} + +int +bar (int x) +{ + /* None of the following should pass. */ + switch (x) + { + case -1 >> 200: /* { dg-error "case label does not reduce to an integer constant" } */ + case 1 << 200: /* { dg-error "case label does not reduce to an integer constant" } */ + return 1; + } + return 0; +} Marek