diff options
-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>(); |