diff options
author | Andrew Pinski <andrew_pinski@playstation.sony.com> | 2007-03-15 01:27:29 +0000 |
---|---|---|
committer | Andrew Pinski <pinskia@gcc.gnu.org> | 2007-03-14 18:27:29 -0700 |
commit | 344bd5a86133fcdff69396d9cc526317630c0f70 (patch) | |
tree | 40387ede534231616a096b2529605fffa90afb24 | |
parent | 22cbc70726b96dbdc4b5fee428af20843423190a (diff) | |
download | gcc-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/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/call.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/other/default7.C | 20 |
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(); +} + + |