OSDN Git Service

PR c++/28052
authorreichelt <reichelt@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 20 Jun 2006 13:02:47 +0000 (13:02 +0000)
committerreichelt <reichelt@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 20 Jun 2006 13:02:47 +0000 (13:02 +0000)
* init.c (push_base_cleanups): Skip members with invalid types.
* typeck.c (build_class_member_access_expr): Robustify.

* g++.dg/other/bitfield2.C: New test.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@114811 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/cp/ChangeLog
gcc/cp/init.c
gcc/cp/typeck.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/other/bitfield2.C [new file with mode: 0644]

index 72a723f..7f022ad 100644 (file)
@@ -1,3 +1,9 @@
+2006-06-20  Volker Reichelt  <reichelt@igpm.rwth-aachen.de>
+
+       PR c++/28052
+       * init.c (push_base_cleanups): Skip members with invalid types.
+       * typeck.c (build_class_member_access_expr): Robustify.
+
 2006-06-19  Mark Mitchell  <mark@codesourcery.com>
 
        * pt.c (instantiate_template): Fix typo in comment.
index 590036b..357cba9 100644 (file)
@@ -2898,7 +2898,9 @@ push_base_cleanups (void)
   for (member = TYPE_FIELDS (current_class_type); member;
        member = TREE_CHAIN (member))
     {
-      if (TREE_CODE (member) != FIELD_DECL || DECL_ARTIFICIAL (member))
+      if (TREE_TYPE (member) == error_mark_node
+         || TREE_CODE (member) != FIELD_DECL
+         || DECL_ARTIFICIAL (member))
        continue;
       if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (member)))
        {
index d50c08b..f993bf7 100644 (file)
@@ -1723,7 +1723,7 @@ build_class_member_access_expr (tree object, tree member,
   tree member_scope;
   tree result = NULL_TREE;
 
-  if (object == error_mark_node || member == error_mark_node)
+  if (error_operand_p (object) || error_operand_p (member))
     return error_mark_node;
 
   gcc_assert (DECL_P (member) || BASELINK_P (member));
index 5491dbe..4aa506f 100644 (file)
@@ -1,3 +1,8 @@
+2006-06-20  Volker Reichelt  <reichelt@igpm.rwth-aachen.de>
+
+       PR c++/28052
+       * g++.dg/other/bitfield2.C: New test.
+
 2006-06-20  Zdenek Dvorak <dvorakz@suse.cz>
 
        PR tree-optimization/27331
diff --git a/gcc/testsuite/g++.dg/other/bitfield2.C b/gcc/testsuite/g++.dg/other/bitfield2.C
new file mode 100644 (file)
index 0000000..cd9a837
--- /dev/null
@@ -0,0 +1,9 @@
+// PR c++/28052
+// { dg-do compile }
+
+struct A
+{
+  double d : 2;  // { dg-error "non-integral" }
+  A() {}
+  ~A() {}
+};