aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorPaolo Carlini <paolo.carlini@oracle.com>2008-08-28 23:37:41 +0000
committerPaolo Carlini <paolo@gcc.gnu.org>2008-08-28 23:37:41 +0000
commitffe79825902c65abf908d8376329f4a85269af60 (patch)
tree22d7a81786a9372beca21781a0b8bf7cfcfabd53 /gcc
parent1cd8b853ba9b8c120ba47182845f62bf2fd1788d (diff)
downloadgcc-ffe79825902c65abf908d8376329f4a85269af60.zip
gcc-ffe79825902c65abf908d8376329f4a85269af60.tar.gz
gcc-ffe79825902c65abf908d8376329f4a85269af60.tar.bz2
re PR c++/37260 (infinite loop in init)
/cp 2008-08-28 Paolo Carlini <paolo.carlini@oracle.com> PR c++/37260 * decl.c (reshape_init_r): Check init for error_mark_node. /testsuite 2008-08-28 Paolo Carlini <paolo.carlini@oracle.com> PR c++/37260 * g++.dg/parse/crash44.C: New. From-SVN: r139740
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog5
-rw-r--r--gcc/cp/decl.c3
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/parse/crash44.C15
4 files changed, 28 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 7d2266c..b462401 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,8 @@
+2008-08-28 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR c++/37260
+ * decl.c (reshape_init_r): Check init for error_mark_node.
+
2008-08-27 Manuel Lopez-Ibanez <manu@gcc.gnu.org>
PR c++/17880
diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c
index 2f5d6eb..c3d63bb 100644
--- a/gcc/cp/decl.c
+++ b/gcc/cp/decl.c
@@ -4772,6 +4772,9 @@ reshape_init_r (tree type, reshape_iter *d, bool first_initializer_p)
{
tree init = d->cur->value;
+ if (error_operand_p (init))
+ return error_mark_node;
+
/* A non-aggregate type is always initialized with a single
initializer. */
if (!CP_AGGREGATE_TYPE_P (type))
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index f65db77..19816c0 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2008-08-28 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR c++/37260
+ * g++.dg/parse/crash44.C: New.
+
2008-08-28 Adam Nemet <anemet@caviumnetworks.com>
* gcc.target/mips/octeon-dmul-1.c: New test.
diff --git a/gcc/testsuite/g++.dg/parse/crash44.C b/gcc/testsuite/g++.dg/parse/crash44.C
new file mode 100644
index 0000000..abdf827
--- /dev/null
+++ b/gcc/testsuite/g++.dg/parse/crash44.C
@@ -0,0 +1,15 @@
+// PR c++/37260
+// { dg-options "" }
+
+struct pthread_once_t { };
+struct test {
+ pthread_once_t once;
+};
+
+int main(void) {
+ struct test foo = {
+ once: PTHREAD_ONCE_INITIALIZER // { dg-error "error: 'PTHREAD_ONCE_INITIALIZER' was not declared in this scope" }
+ };
+
+ return 0;
+}