aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Pinski <andrew_pinski@playstation.sony.com>2007-03-15 01:27:29 +0000
committerAndrew Pinski <pinskia@gcc.gnu.org>2007-03-14 18:27:29 -0700
commit344bd5a86133fcdff69396d9cc526317630c0f70 (patch)
tree40387ede534231616a096b2529605fffa90afb24
parent22cbc70726b96dbdc4b5fee428af20843423190a (diff)
downloadgcc-344bd5a86133fcdff69396d9cc526317630c0f70.zip
gcc-344bd5a86133fcdff69396d9cc526317630c0f70.tar.gz
gcc-344bd5a86133fcdff69396d9cc526317630c0f70.tar.bz2
re PR c++/31165 (Error: symbol `an_empty_string' is already defined)
2007-03-14 Andrew Pinski <andrew_pinski@playstation.sony.com> PR c++/31165 * call.c (convert_default_arg): Instead of copying the node, unshare it. 2007-03-14 Andrew Pinski <andrew_pinski@playstation.sony.com> PR C++/31165 * g++.dg/other/default7.C: New test. From-SVN: r122941
-rw-r--r--gcc/cp/ChangeLog6
-rw-r--r--gcc/cp/call.c2
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/other/default7.C20
4 files changed, 32 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 2142ac4..7d10b2d 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,9 @@
+2007-03-14 Andrew Pinski <andrew_pinski@playstation.sony.com>
+
+ PR c++/31165
+ * call.c (convert_default_arg): Instead of copying the node,
+ unshare it.
+
2007-03-15 Dirk Mueller <dmueller@suse.de>
PR c++/30860
diff --git a/gcc/cp/call.c b/gcc/cp/call.c
index 53129bb..9d25298 100644
--- a/gcc/cp/call.c
+++ b/gcc/cp/call.c
@@ -4683,7 +4683,7 @@ convert_default_arg (tree type, tree arg, tree fn, int parmnum)
VAR_DECL. We can avoid the copy for constants, since they
are never modified in place. */
if (!CONSTANT_CLASS_P (arg))
- arg = copy_node (arg);
+ arg = unshare_expr (arg);
arg = convert_for_initialization (0, type, arg, LOOKUP_NORMAL,
"default argument", fn, parmnum);
arg = convert_for_arg_passing (type, arg);
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 27974a9..47d9770 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2007-03-14 Andrew Pinski <andrew_pinski@playstation.sony.com>
+
+ PR C++/31165
+ * g++.dg/other/default7.C: New test.
+
2007-03-15 Dirk Mueller <dmueller@suse.de>
* g++.dg/warn/Wconversion2.C: New.
diff --git a/gcc/testsuite/g++.dg/other/default7.C b/gcc/testsuite/g++.dg/other/default7.C
new file mode 100644
index 0000000..ec523bf
--- /dev/null
+++ b/gcc/testsuite/g++.dg/other/default7.C
@@ -0,0 +1,20 @@
+/* { dg-do assemble } */
+/* { dg-options "-O1" }*/
+// This was PR C++/31165
+// We used to copy the whole decl when we just wantted to
+// unshare some expressions for the default argument.
+class string {
+ char *ptr;
+ int len;
+ int sz;
+};
+class cset { } _cset_init;
+string an_empty_string;
+void f(string& = an_empty_string);
+void
+h (void )
+{
+f();
+}
+
+