]> gcc.gnu.org Git - gcc.git/commitdiff
semantics.c (simplify_aggr_init_exprs_p): Don't walk into types.
authorMark Mitchell <mark@codesourcery.com>
Sun, 27 Feb 2000 05:30:00 +0000 (05:30 +0000)
committerMark Mitchell <mmitchel@gcc.gnu.org>
Sun, 27 Feb 2000 05:30:00 +0000 (05:30 +0000)
* semantics.c (simplify_aggr_init_exprs_p): Don't walk into
types.

From-SVN: r32210

gcc/cp/ChangeLog
gcc/cp/semantics.c
gcc/testsuite/g++.old-deja/g++.other/defarg4.C [new file with mode: 0644]

index 7c73df6934a880678b204ea095cb666336bf8708..af946b32af44e294e5021cdfd849187d85eb7334 100644 (file)
@@ -1,3 +1,8 @@
+2000-02-26  Mark Mitchell  <mark@codesourcery.com>
+
+       * semantics.c (simplify_aggr_init_exprs_p): Don't walk into
+       types.
+
 2000-02-25  Alfred Minarik <a8601248@unet.univie.ac.at>
 
        * rtti.c (get_vmi_pseudo_type_info): Move __vmi_class_type_info
index 52ab681ea59eb38d71838c87af7030945536cc1a..ad961f8b9a0cbfaeea0228b790de75c915313897 100644 (file)
@@ -2618,9 +2618,19 @@ simplify_aggr_init_exprs_r (tp, walk_subtrees, data)
   tree call_type;
   int copy_from_buffer_p;
 
-  /* Only AGGR_INIT_EXPRs are interesting.  */
   aggr_init_expr = *tp;
-  if (TREE_CODE (aggr_init_expr) != AGGR_INIT_EXPR)
+  /* We don't need to walk into types; there's nothing in a type that
+     needs simplification.  (And, furthermore, there are places we
+     actively don't want to go.  For example, we don't want to wander
+     into the default arguments for a FUNCTION_DECL that appears in a
+     CALL_EXPR.)  */
+  if (TYPE_P (aggr_init_expr))
+    {
+      *walk_subtrees = 0;
+      return NULL_TREE;
+    }
+  /* Only AGGR_INIT_EXPRs are interesting.  */
+  else if (TREE_CODE (aggr_init_expr) != AGGR_INIT_EXPR)
     return NULL_TREE;
 
   /* Form an appropriate CALL_EXPR.  */
diff --git a/gcc/testsuite/g++.old-deja/g++.other/defarg4.C b/gcc/testsuite/g++.old-deja/g++.other/defarg4.C
new file mode 100644 (file)
index 0000000..87ad4fc
--- /dev/null
@@ -0,0 +1,27 @@
+// Origin: scott snyder <snyder@fnal.gov>
+
+class complex
+{
+public:
+  complex();
+};
+
+struct MLC33
+{
+  MLC33( const complex& = complex() );
+};
+
+void EmptyClone()
+{
+  MLC33();
+}
+
+void makeM33()
+{
+  MLC33();
+}
+
+void Clone()
+{
+  MLC33();
+}
This page took 0.093806 seconds and 5 git commands to generate.