aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2012-10-25 11:53:40 -0400
committerJason Merrill <jason@gcc.gnu.org>2012-10-25 11:53:40 -0400
commit57c3feb40a875ec85620513b49c758c6076a289a (patch)
tree8e1f9e7c2a795ddbe9e700d189b8b3e3f12c5d5f
parent4514a96b2ac1f53606fed91f2a6e40f5267bfd8b (diff)
downloadgcc-57c3feb40a875ec85620513b49c758c6076a289a.zip
gcc-57c3feb40a875ec85620513b49c758c6076a289a.tar.gz
gcc-57c3feb40a875ec85620513b49c758c6076a289a.tar.bz2
* semantics.c (finish_omp_threadprivate): Call complete_type.
From-SVN: r192812
-rw-r--r--gcc/cp/ChangeLog2
-rw-r--r--gcc/cp/semantics.c2
-rw-r--r--gcc/testsuite/g++.dg/gomp/tls-template1.C13
-rw-r--r--libgomp/testsuite/libgomp.c++/tls-init1.C2
4 files changed, 18 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 38e79f5..278a668 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,5 +1,7 @@
2012-10-25 Jason Merrill <jason@redhat.com>
+ * semantics.c (finish_omp_threadprivate): Call complete_type.
+
* class.c (one_inherited_ctor): Warn about variadic inherited ctor.
2012-10-25 Marc Glisse <marc.glisse@inria.fr>
diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c
index 63b364c..073ee97 100644
--- a/gcc/cp/semantics.c
+++ b/gcc/cp/semantics.c
@@ -4360,7 +4360,7 @@ finish_omp_threadprivate (tree vars)
error ("%qE declared %<threadprivate%> after first use", v);
else if (! TREE_STATIC (v) && ! DECL_EXTERNAL (v))
error ("automatic variable %qE cannot be %<threadprivate%>", v);
- else if (! COMPLETE_TYPE_P (TREE_TYPE (v)))
+ else if (! COMPLETE_TYPE_P (complete_type (TREE_TYPE (v))))
error ("%<threadprivate%> %qE has incomplete type", v);
else if (TREE_STATIC (v) && TYPE_P (CP_DECL_CONTEXT (v))
&& CP_DECL_CONTEXT (v) != current_class_type)
diff --git a/gcc/testsuite/g++.dg/gomp/tls-template1.C b/gcc/testsuite/g++.dg/gomp/tls-template1.C
new file mode 100644
index 0000000..5865ce3
--- /dev/null
+++ b/gcc/testsuite/g++.dg/gomp/tls-template1.C
@@ -0,0 +1,13 @@
+// { dg-require-effective-target tls }
+
+template <class T> struct B
+{
+ T t;
+};
+
+class A {
+ static B<int> b;
+#pragma omp threadprivate(b)
+};
+
+B<int> A::b;
diff --git a/libgomp/testsuite/libgomp.c++/tls-init1.C b/libgomp/testsuite/libgomp.c++/tls-init1.C
index 4cbaccb..d62e96b 100644
--- a/libgomp/testsuite/libgomp.c++/tls-init1.C
+++ b/libgomp/testsuite/libgomp.c++/tls-init1.C
@@ -1,3 +1,5 @@
+// { dg-require-alias }
+
extern "C" void abort();
struct A