frontend: don't ice with pragma NOVECTOR if loop has no condition [PR113267]
In C you can have loops without a condition, the original version of the patch was rejecting the use of #pragma GCC novector, however during review it was changed to not due this with the reason that we didn't want to give a compile error with such cases. However because annotations seem to be only be allowed on conditions (unless I'm mistaken?) the attached example ICEs because there's no condition. This will have it ignore the pragma instead of ICEing. I don't know if this is the best solution, but as far as I can tell we can't attach the annotation to anything else. gcc/c/ChangeLog: PR c/113267 * c-parser.cc (c_parser_for_statement): Skip the pragma is no cond. gcc/testsuite/ChangeLog: PR c/113267 * gcc.dg/pr113267.c: New test.
This commit is contained in:
parent
cbf569486b
commit
109f231672
2 changed files with 9 additions and 1 deletions
|
@ -8445,7 +8445,7 @@ c_parser_for_statement (c_parser *parser, bool ivdep, unsigned short unroll,
|
|||
build_int_cst (integer_type_node,
|
||||
annot_expr_unroll_kind),
|
||||
build_int_cst (integer_type_node, unroll));
|
||||
if (novector && cond != error_mark_node)
|
||||
if (novector && cond && cond != error_mark_node)
|
||||
cond = build3 (ANNOTATE_EXPR, TREE_TYPE (cond), cond,
|
||||
build_int_cst (integer_type_node,
|
||||
annot_expr_no_vector_kind),
|
||||
|
|
8
gcc/testsuite/gcc.dg/pr113267.c
Normal file
8
gcc/testsuite/gcc.dg/pr113267.c
Normal file
|
@ -0,0 +1,8 @@
|
|||
/* { dg-do compile } */
|
||||
|
||||
void f (char *a, int i)
|
||||
{
|
||||
#pragma GCC novector
|
||||
for (;;i++)
|
||||
a[i] *= 2;
|
||||
}
|
Loading…
Add table
Reference in a new issue