diff options
| author | jason <jason@138bc75d-0d04-0410-961f-82ee72b054a4> | 2010-12-22 19:23:15 +0000 |
|---|---|---|
| committer | jason <jason@138bc75d-0d04-0410-961f-82ee72b054a4> | 2010-12-22 19:23:15 +0000 |
| commit | 5ed432d9533383cf3fca50b5de53d28b2c6f0da5 (patch) | |
| tree | 3addc503e7d9d3b1a41116431328e3849a7a0e44 | |
| parent | f07e4b1bf5cd757e996666ab9cf4c4ae94750cad (diff) | |
| download | ppe42-gcc-5ed432d9533383cf3fca50b5de53d28b2c6f0da5.tar.gz ppe42-gcc-5ed432d9533383cf3fca50b5de53d28b2c6f0da5.zip | |
PR c++/47003
* tree.c (stabilize_expr): Really stabilize scalar glvalues.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@168180 138bc75d-0d04-0410-961f-82ee72b054a4
| -rw-r--r-- | gcc/cp/ChangeLog | 5 | ||||
| -rw-r--r-- | gcc/cp/tree.c | 4 | ||||
| -rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
| -rw-r--r-- | gcc/testsuite/g++.dg/init/volatile2.C | 13 |
4 files changed, 23 insertions, 3 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 62b7d8d8197..cb9cd95a272 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2010-12-22 Jason Merrill <jason@redhat.com> + + PR c++/47003 + * tree.c (stabilize_expr): Really stabilize scalar glvalues. + 2010-12-22 Rodrigo Rivas Costa <rodrigorivascosta@gmail.com> * parser.c (cp_parser_unary_expression): Call pedwarn for alignof diff --git a/gcc/cp/tree.c b/gcc/cp/tree.c index 1a77dc18f32..ecb764adcc3 100644 --- a/gcc/cp/tree.c +++ b/gcc/cp/tree.c @@ -3058,9 +3058,7 @@ stabilize_expr (tree exp, tree* initp) if (!TREE_SIDE_EFFECTS (exp)) init_expr = NULL_TREE; - /* There are no expressions with REFERENCE_TYPE, but there can be call - arguments with such a type; just treat it as a pointer. */ - else if (TREE_CODE (TREE_TYPE (exp)) == REFERENCE_TYPE + else if (!TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (exp)) || !lvalue_or_rvalue_with_address_p (exp)) { init_expr = get_target_expr (exp); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 06257d17853..906fc60ab4e 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2010-12-22 Jason Merrill <jason@redhat.com> + + * g++.dg/init/volatile2.C: New. + 2010-12-22 Rodrigo Rivas Costa <rodrigorivascosta@gmail.com> * g++.dg/cpp0x/alignof2.C: New. diff --git a/gcc/testsuite/g++.dg/init/volatile2.C b/gcc/testsuite/g++.dg/init/volatile2.C new file mode 100644 index 00000000000..036d5f162d6 --- /dev/null +++ b/gcc/testsuite/g++.dg/init/volatile2.C @@ -0,0 +1,13 @@ +// PR c++/47003 + +struct A +{ + A(int); +}; + +volatile int i; + +int main() +{ + A *q = new A (i); +} |

