diff options
author | Jakub Jelinek <jakub@redhat.com> | 2006-04-26 10:23:12 +0200 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2006-04-26 10:23:12 +0200 |
commit | 1562e1fee7c5eec57c05a37c7dca6d4c333dbf7f (patch) | |
tree | aab43f6a1e168b21c80aab603cd23a16d448dce7 /gcc | |
parent | 21a66e91d04c775dc4a022fb950c4163c593c090 (diff) | |
download | gcc-1562e1fee7c5eec57c05a37c7dca6d4c333dbf7f.zip gcc-1562e1fee7c5eec57c05a37c7dca6d4c333dbf7f.tar.gz gcc-1562e1fee7c5eec57c05a37c7dca6d4c333dbf7f.tar.bz2 |
re PR c/25996 ([gomp] ICE on undefined iteration variable)
PR c/25996
* c-parser.c (c_parser_omp_for_loop): Don't call c_finish_omp_for if
either decl or init is error_mark_node.
* gcc.dg/gomp/pr25996.c: New test.
* g++.dg/gomp/pr25996.C: New test.
From-SVN: r113269
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/c-parser.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/gomp/pr25996.C | 32 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/gomp/pr25996.c | 32 |
5 files changed, 75 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 28f8d3f..0a3504d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,9 @@ 2006-04-26 Jakub Jelinek <jakub@redhat.com> + PR c/25996 + * c-parser.c (c_parser_omp_for_loop): Don't call c_finish_omp_for if + either decl or init is error_mark_node. + PR middle-end/25989 * tree-flow.h (struct omp_region): Add sched_kind. * omp-low.c (expand_parallel_call): Use region->inner->sched_kind diff --git a/gcc/c-parser.c b/gcc/c-parser.c index 0c90fa8..8cad310 100644 --- a/gcc/c-parser.c +++ b/gcc/c-parser.c @@ -7379,7 +7379,7 @@ c_parser_omp_for_loop (c_parser *parser) /* Only bother calling c_finish_omp_for if we havn't already generated an error from the initialization parsing. */ - if (decl != NULL) + if (decl != NULL && decl != error_mark_node && init != error_mark_node) return c_finish_omp_for (loc, decl, init, cond, incr, body, NULL); return NULL; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 4f4944e..c59270d 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2006-04-26 Jakub Jelinek <jakub@redhat.com> + + PR c/25996 + * gcc.dg/gomp/pr25996.c: New test. + * g++.dg/gomp/pr25996.C: New test. + 2006-04-25 Richard Sandiford <richard@codesourcery.com> PR rtl-optimization/26725 diff --git a/gcc/testsuite/g++.dg/gomp/pr25996.C b/gcc/testsuite/g++.dg/gomp/pr25996.C new file mode 100644 index 0000000..6b50ff0 --- /dev/null +++ b/gcc/testsuite/g++.dg/gomp/pr25996.C @@ -0,0 +1,32 @@ +// PR c/25996 + +void +test1 (void) +{ +#pragma omp for + for (i = 0; i < 1; ++i); // { dg-error "not declared|expected iteration decl" } +} + +void +test2 (void) +{ + int i; +#pragma omp for + for (i = j; i < 1; ++i); // { dg-error "not declared|expected iteration decl" } +} + +void +test3 (void) +{ + int i; +#pragma omp for + for (i = 0; i < j; ++i); // { dg-error "not declared|invalid controlling predicate" } +} + +void +test4 (void) +{ + int i; +#pragma omp for + for (i = 0; i < 10; i += j); // { dg-error "not declared|invalid increment expression" } +} diff --git a/gcc/testsuite/gcc.dg/gomp/pr25996.c b/gcc/testsuite/gcc.dg/gomp/pr25996.c new file mode 100644 index 0000000..d58c9a1 --- /dev/null +++ b/gcc/testsuite/gcc.dg/gomp/pr25996.c @@ -0,0 +1,32 @@ +/* PR c/25996 */ + +void +test1 (void) +{ +#pragma omp for + for (i = 0; i < 1; ++i); /* { dg-error "undeclared|for each function" } */ +} + +void +test2 (void) +{ + int i; +#pragma omp for + for (i = j; i < 1; ++i); /* { dg-error "undeclared" } */ +} + +void +test3 (void) +{ + int i; +#pragma omp for + for (i = 0; i < j; ++i); /* { dg-error "undeclared|invalid controlling predicate" } */ +} + +void +test4 (void) +{ + int i; +#pragma omp for + for (i = 0; i < 10; i += j); /* { dg-error "undeclared|invalid increment expression" } */ +} |