+++ This bug was initially created as a clone of Bug #27557 +++
This bug presented here is likely the same as Bug #27557, but this test case
does not involve a non-POD type.
Following program gets a compile time error with g++, but is able to compile
and execute using PGI and PathScale compilers.
$ cat bug2907.cpp
/* derived from OpenMP API Ver 2.5 p. 159 Example A.22.3c */
#include <omp.h>
#include <stdio.h>
#define NT 4
class T {
public:
int val;
T (int);
T (const T&);
};
T :: T (int v){
val = v;
}
T :: T (const T& t) {
val = t.val;
}
int x = 1;
const T b_aux(x);
T b(b_aux);
#pragma omp threadprivate(b)
int main()
{
int save_val;
omp_set_num_threads(NT);
x++;
#pragma omp parallel default(none) shared(save_val)
{
if (omp_get_thread_num()==0) save_val = b.val;
}
printf("save_val=%d\n",save_val);
return 0;
}
$ g++ -fopenmp bug2907.cpp
bug2907.cpp:23: error: 'b' declared 'threadprivate' after first use
bug2907.cpp: In function 'int main()':
bug2907.cpp:33: error: 'b' not specified in enclosing parallel
bug2907.cpp:31: error: enclosing parallel
$ pathCC -mp bug2907.cpp; ./a.out
save_val=1
$ pgCC -mp=nonuma bug2907.cpp; ./a.out
Warning: omp_set_num_threads (4) greater than available cpus (1)
save_val=1
$
--
Summary: C++ class variable gets compiler error "declared
'threadprivate' after first use"
Product: gcc
Version: 4.2.2
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: geir at cray dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=34303