From: Paolo Carlini Date: Thu, 28 Aug 2008 23:37:41 +0000 (+0000) Subject: re PR c++/37260 (infinite loop in init) X-Git-Tag: releases/gcc-4.4.0~2816 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=ffe79825902c65abf908d8376329f4a85269af60;p=thirdparty%2Fgcc.git re PR c++/37260 (infinite loop in init) /cp 2008-08-28 Paolo Carlini PR c++/37260 * decl.c (reshape_init_r): Check init for error_mark_node. /testsuite 2008-08-28 Paolo Carlini PR c++/37260 * g++.dg/parse/crash44.C: New. From-SVN: r139740 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 7d2266c65eb0..b462401c6546 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2008-08-28 Paolo Carlini + + PR c++/37260 + * decl.c (reshape_init_r): Check init for error_mark_node. + 2008-08-27 Manuel Lopez-Ibanez PR c++/17880 diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index 2f5d6ebd13ff..c3d63bbeaadf 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 f65db77f24ba..19816c0bf4a9 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2008-08-28 Paolo Carlini + + PR c++/37260 + * g++.dg/parse/crash44.C: New. + 2008-08-28 Adam Nemet * 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 000000000000..abdf827cd4de --- /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; +}