re PR c++/20461 (ICE at "class 'C' does not have any field named 'f'" error)
authorPaolo Carlini <pcarlini@suse.de>
Mon, 21 Mar 2005 11:49:32 +0000 (11:49 +0000)
committerPaolo Carlini <paolo@gcc.gnu.org>
Mon, 21 Mar 2005 11:49:32 +0000 (11:49 +0000)
2005-03-21  Paolo Carlini  <pcarlini@suse.de>

PR c++/20461
PR c++/20536
* init.c (emit_mem_initializers): Don't crash on undefined
types.

2005-03-21  Paolo Carlini  <pcarlini@suse.de>

PR c++/20147
* semantics.c (finish_stmt_expr_expr): Return immediately
if error_operand_p (expr).

From-SVN: r96784

gcc/cp/ChangeLog
gcc/cp/init.c
gcc/cp/semantics.c

index 76c1305..1f79100 100644 (file)
@@ -1,3 +1,16 @@
+2005-03-21  Paolo Carlini  <pcarlini@suse.de>
+
+       PR c++/20461
+       PR c++/20536
+       * init.c (emit_mem_initializers): Don't crash on undefined
+       types.
+
+2005-03-21  Paolo Carlini  <pcarlini@suse.de>
+
+       PR c++/20147
+       * semantics.c (finish_stmt_expr_expr): Return immediately
+       if error_operand_p (expr).
+
 2005-03-21  Joseph S. Myers  <joseph@codesourcery.com>
 
        * cp-tree.h (lvalue_or_else, lvalue_p): New.
index c526bb1..ddf39bf 100644 (file)
@@ -655,6 +655,11 @@ sort_mem_initializers (tree t, tree mem_inits)
 void
 emit_mem_initializers (tree mem_inits)
 {
+  /* We will already have issued an error message about the fact that
+     the type is incomplete.  */
+  if (!COMPLETE_TYPE_P (current_class_type))
+    return;
+  
   /* Sort the mem-initializers into the order in which the
      initializations should be performed.  */
   mem_inits = sort_mem_initializers (current_class_type, mem_inits);
index 15762cb..f0dc8c2 100644 (file)
@@ -1523,6 +1523,9 @@ finish_stmt_expr_expr (tree expr, tree stmt_expr)
 {
   tree result = NULL_TREE;
 
+  if (error_operand_p (expr))
+    return error_mark_node;
+  
   if (expr)
     {
       if (!processing_template_decl && !VOID_TYPE_P (TREE_TYPE (expr)))