re PR middle-end/64824 (ICE in gimple verification)
PR c/64824 * c-parser.c (c_parser_binary_expression): Fix OpenMP stack[sp].prec check in the POP macro. * testsuite/libgomp.c/atomic-18.c: New test. * testsuite/libgomp.c++/atomic-16.C: New test. From-SVN: r220617
This commit is contained in:
parent
c43ade8004
commit
fa01ffccc7
@ -1,3 +1,9 @@
|
||||
2015-02-11 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR c/64824
|
||||
* c-parser.c (c_parser_binary_expression): Fix OpenMP stack[sp].prec
|
||||
check in the POP macro.
|
||||
|
||||
2015-02-09 Marek Polacek <polacek@redhat.com>
|
||||
|
||||
PR c/64856
|
||||
|
@ -6233,8 +6233,8 @@ c_parser_binary_expression (c_parser *parser, struct c_expr *after,
|
||||
if (__builtin_expect (omp_atomic_lhs != NULL_TREE, 0) && sp == 1 \
|
||||
&& c_parser_peek_token (parser)->type == CPP_SEMICOLON \
|
||||
&& ((1 << stack[sp].prec) \
|
||||
& (1 << (PREC_BITOR | PREC_BITXOR | PREC_BITAND | PREC_SHIFT \
|
||||
| PREC_ADD | PREC_MULT))) \
|
||||
& ((1 << PREC_BITOR) | (1 << PREC_BITXOR) | (1 << PREC_BITAND) \
|
||||
| (1 << PREC_SHIFT) | (1 << PREC_ADD) | (1 << PREC_MULT))) \
|
||||
&& stack[sp].op != TRUNC_MOD_EXPR \
|
||||
&& stack[0].expr.value != error_mark_node \
|
||||
&& stack[1].expr.value != error_mark_node \
|
||||
|
@ -1,3 +1,9 @@
|
||||
2015-02-11 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR c/64824
|
||||
* testsuite/libgomp.c/atomic-18.c: New test.
|
||||
* testsuite/libgomp.c++/atomic-16.C: New test.
|
||||
|
||||
2015-02-04 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR c/64824
|
||||
|
5
libgomp/testsuite/libgomp.c++/atomic-16.C
Normal file
5
libgomp/testsuite/libgomp.c++/atomic-16.C
Normal file
@ -0,0 +1,5 @@
|
||||
// PR c/64824
|
||||
// { dg-do run }
|
||||
// { dg-options "-O2 -fopenmp" }
|
||||
|
||||
#include "../libgomp.c/atomic-18.c"
|
61
libgomp/testsuite/libgomp.c/atomic-18.c
Normal file
61
libgomp/testsuite/libgomp.c/atomic-18.c
Normal file
@ -0,0 +1,61 @@
|
||||
/* PR c/64824 */
|
||||
/* { dg-do run } */
|
||||
/* { dg-options "-O2 -fopenmp" } */
|
||||
|
||||
void
|
||||
f1 (void)
|
||||
{
|
||||
short a;
|
||||
short b = 1;
|
||||
int c = 3;
|
||||
#pragma omp atomic capture
|
||||
a = b = c << b;
|
||||
if (b != 6 || a != 6)
|
||||
__builtin_abort ();
|
||||
}
|
||||
|
||||
void
|
||||
f2 (void)
|
||||
{
|
||||
short a;
|
||||
short b = 1;
|
||||
int c = 3;
|
||||
#pragma omp atomic capture
|
||||
a = b = c + b;
|
||||
if (b != 4 || a != 4)
|
||||
__builtin_abort ();
|
||||
}
|
||||
|
||||
void
|
||||
f3 (void)
|
||||
{
|
||||
short a;
|
||||
short b = 1;
|
||||
long long int c = 3;
|
||||
#pragma omp atomic capture
|
||||
a = b = c + b;
|
||||
if (b != 4 || a != 4)
|
||||
__builtin_abort ();
|
||||
}
|
||||
|
||||
void
|
||||
f4 (void)
|
||||
{
|
||||
char a;
|
||||
char b = 1;
|
||||
long long int c = 3LL;
|
||||
#pragma omp atomic capture
|
||||
a = b = c << b;
|
||||
if (b != 6 || a != 6)
|
||||
__builtin_abort ();
|
||||
}
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
f1 ();
|
||||
f2 ();
|
||||
f3 ();
|
||||
f4 ();
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue
Block a user