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

Reply via email to