From: Jason Merrill Date: Thu, 18 Feb 2010 19:20:21 +0000 (-0500) Subject: re PR target/43070 (g++.dg/ext/label2.C fails to compile at -O1) X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=7890246f665ba2778e91aae45580016cccecca35;p=gcc.git 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 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 1fdeef498b3..a54d30aaf68 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,8 @@ 2010-02-18 Jason Merrill + 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 24390d98c0c..5d8b767b272 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 4225d998ce0..f3957e15c0a 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,9 @@ 2010-02-18 Jason Merrill + 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 8c6684dce0e..95fd644e28a 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 1b66f603fe4..7d11d00f52e 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();