The following fixes an ICE on invalid code by checking that DECL_SIZE is
not null before feeding it to integer_zerop.

Bootstrapped/regtested on x86_64-linux, ok for trunk?

2015-03-25  Marek Polacek  <pola...@redhat.com>

        PR c++/61670
        * class.c (remove_zero_width_bit_fields): Check for null DECL_SIZE.

        * g++.dg/template/pr61670.C: New test.

diff --git gcc/cp/class.c gcc/cp/class.c
index 0518320..c2d4201 100644
--- gcc/cp/class.c
+++ gcc/cp/class.c
@@ -5434,7 +5434,8 @@ remove_zero_width_bit_fields (tree t)
             DECL_INITIAL (*fieldsp).
             check_bitfield_decl eventually sets DECL_SIZE (*fieldsp)
             to that width.  */
-         && integer_zerop (DECL_SIZE (*fieldsp)))
+         && (DECL_SIZE (*fieldsp) == NULL_TREE
+             || integer_zerop (DECL_SIZE (*fieldsp))))
        *fieldsp = DECL_CHAIN (*fieldsp);
       else
        fieldsp = &DECL_CHAIN (*fieldsp);
diff --git gcc/testsuite/g++.dg/template/pr61670.C 
gcc/testsuite/g++.dg/template/pr61670.C
index e69de29..d244efa 100644
--- gcc/testsuite/g++.dg/template/pr61670.C
+++ gcc/testsuite/g++.dg/template/pr61670.C
@@ -0,0 +1,9 @@
+// PR c++/61670
+// { dg-do compile }
+
+template <class>
+class A {
+  A: 0 // { dg-error "" }
+};
+
+A<int> a;

        Marek

Reply via email to