[Bug c++/38650] New: [4.3/4.4 regression] Trouble with volatile and #pragma omp for
reichelt at gcc dot gnu dot org
gcc-bugzilla@gcc.gnu.org
Sun Dec 28 00:23:00 GMT 2008
There is some strange behavior with #pragma omp for and volatiles:
=================================
void foo()
{
volatile int i, j = 1;
#pragma omp for
for (i = 0; i < j; i += 1)
;
}
=================================
bug.cc: In function 'void foo()':
bug.cc:4: internal compiler error: in gimplify_omp_for, at gimplify.c:5880
Please submit a full bug report, [etc.]
A similar code snippet (using ++i instead of i+=1 as incrememt) is accepted:
=================================
void foo()
{
volatile int i, j = 1;
#pragma omp for
for (i = 0; i < j; ++i)
;
}
=================================
Another slight variation (using i<1 instead of i<j as loop condition)
is rejected:
=================================
void foo()
{
volatile int i;
#pragma omp for
for (i = 0; i < 1; ++i)
;
}
=================================
bug.cc: In function 'void foo()':
bug.cc:5: error: invalid controlling predicate
The above only holds for the C++ frontend since GCC 4.3.0.
With the C frontend or GCC 4.2.x all three snippets compile fine.
I looked into the specification of OpenMP 3.0 and found nothing forbidding
the use of volatiles as loop counters. On the other hand volatile is IMHO
against the semantics of parallel for where magically changing loop counters
would make no sense. Maybe that's even a defect of the OpenMP specification.
--
Summary: [4.3/4.4 regression] Trouble with volatile and #pragma
omp for
Product: gcc
Version: 4.4.0
Status: UNCONFIRMED
Keywords: ice-on-valid-code, rejects-valid, monitored, openmp
Severity: normal
Priority: P3
Component: c++
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: reichelt at gcc dot gnu dot org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=38650
More information about the Gcc-bugs
mailing list