diff options
author | Jason Merrill <jason@redhat.com> | 2010-02-18 14:20:21 -0500 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2010-02-18 14:20:21 -0500 |
commit | 7890246f665ba2778e91aae45580016cccecca35 (patch) | |
tree | f6d1a310879f52450abbd785b8773143785847ee | |
parent | bb7dcd0ef31d158f41ca2bd69d5c941cb1c7fdf3 (diff) | |
download | gcc-7890246f665ba2778e91aae45580016cccecca35.zip gcc-7890246f665ba2778e91aae45580016cccecca35.tar.gz gcc-7890246f665ba2778e91aae45580016cccecca35.tar.bz2 |
re PR target/43070 (g++.dg/ext/label2.C fails to compile at -O1)
PR c++/43070
* semantics.c (finish_goto_stmt): Don't call decay_conversion.
From-SVN: r156872
-rw-r--r-- | gcc/cp/ChangeLog | 3 | ||||
-rw-r--r-- | gcc/cp/semantics.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/ext/label1.C | 4 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/ext/label2.C | 2 |
5 files changed, 11 insertions, 4 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 1fdeef4..a54d30a 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,8 @@ 2010-02-18 Jason Merrill <jason@redhat.com> + PR c++/43070 + * semantics.c (finish_goto_stmt): Don't call decay_conversion. + PR c++/26261 PR c++/43101 * pt.c (tsubst_qualified_id): Do normal lookup in non-dependent scope. diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c index 24390d9..5d8b767 100644 --- a/gcc/cp/semantics.c +++ b/gcc/cp/semantics.c @@ -546,10 +546,8 @@ finish_goto_stmt (tree destination) TREE_USED (destination) = 1; else { - /* The DESTINATION is being used as an rvalue. */ if (!processing_template_decl) { - destination = decay_conversion (destination); destination = cp_convert (ptr_type_node, destination); if (error_operand_p (destination)) return NULL_TREE; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 4225d99..f3957e1 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,9 @@ 2010-02-18 Jason Merrill <jason@redhat.com> + PR c++/43070 + * g++.dg/ext/label1.C: Update. + * g++.dg/ext/label2.C: Update. + PR c++/26261 * g++.dg/template/dependent-name6.C: New. diff --git a/gcc/testsuite/g++.dg/ext/label1.C b/gcc/testsuite/g++.dg/ext/label1.C index 8c6684d..95fd644 100644 --- a/gcc/testsuite/g++.dg/ext/label1.C +++ b/gcc/testsuite/g++.dg/ext/label1.C @@ -2,7 +2,9 @@ int main(void) { static const void* lbls[2][2] = {{&&lbl0, &&lbl0}, {&&lbl0, &&lbl0}}; - goto *lbls[0]; + goto *lbls[0][0]; + goto *lbls[0][0][0]; // { dg-message "" } + goto *lbls[0]; // { dg-error "" } lbl0: ; } diff --git a/gcc/testsuite/g++.dg/ext/label2.C b/gcc/testsuite/g++.dg/ext/label2.C index 1b66f60..7d11d00 100644 --- a/gcc/testsuite/g++.dg/ext/label2.C +++ b/gcc/testsuite/g++.dg/ext/label2.C @@ -5,7 +5,7 @@ void f() { l: void *p[] = { &&l }; - goto *p; + goto *p[0]; } template void f<int>(); |