aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2010-02-18 14:20:21 -0500
committerJason Merrill <jason@gcc.gnu.org>2010-02-18 14:20:21 -0500
commit7890246f665ba2778e91aae45580016cccecca35 (patch)
treef6d1a310879f52450abbd785b8773143785847ee
parentbb7dcd0ef31d158f41ca2bd69d5c941cb1c7fdf3 (diff)
downloadgcc-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/ChangeLog3
-rw-r--r--gcc/cp/semantics.c2
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/g++.dg/ext/label1.C4
-rw-r--r--gcc/testsuite/g++.dg/ext/label2.C2
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>();