aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaolo Carlini <paolo@gcc.gnu.org>2007-05-31 08:58:47 +0000
committerPaolo Carlini <paolo@gcc.gnu.org>2007-05-31 08:58:47 +0000
commit10c1d4af2f3020e5ed8ff7356f06802668e78324 (patch)
tree2f93032e385e7877b9039accd370b84fd24d6dfc
parentfdecbf80705f71143b2ef3e598067b582be95903 (diff)
downloadgcc-10c1d4af2f3020e5ed8ff7356f06802668e78324.zip
gcc-10c1d4af2f3020e5ed8ff7356f06802668e78324.tar.gz
gcc-10c1d4af2f3020e5ed8ff7356f06802668e78324.tar.bz2
re PR c++/32158 (uninitialized_fill compile failure if no default assignment operator)
gcc/cp 2007-05-31 Paolo Carlini <pcarlini@suse.de> PR c++/32158 * semantics.c (finish_trait_expr): Complete the types. gcc/testsuite 2007-05-31 Paolo Carlini <pcarlini@suse.de> PR c++/32158 * g++.dg/ext/is_pod_incomplete.C: New. From-SVN: r125217
-rw-r--r--gcc/cp/ChangeLog5
-rw-r--r--gcc/cp/semantics.c6
-rw-r--r--gcc/testsuite/ChangeLog7
-rw-r--r--gcc/testsuite/g++.dg/ext/is_pod_incomplete.C8
4 files changed, 24 insertions, 2 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 22171e4..885af4f 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,8 @@
+2007-05-31 Paolo Carlini <pcarlini@suse.de>
+
+ PR c++/32158
+ * semantics.c (finish_trait_expr): Complete the types.
+
2007-05-30 Russell Yanofsky <russ@yanofsky.org>
Douglas Gregor <doug.gregor@gmail.com>
Pedro Lamarao <pedro.lamarao@mndfck.org>
diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c
index 631f5e8..4a9ea8c 100644
--- a/gcc/cp/semantics.c
+++ b/gcc/cp/semantics.c
@@ -4177,11 +4177,15 @@ finish_trait_expr (cp_trait_kind kind, tree type1, tree type2)
return trait_expr;
}
+ complete_type (type1);
+ if (type2)
+ complete_type (type2);
+
/* The only required diagnostic. */
if (kind == CPTK_IS_BASE_OF
&& NON_UNION_CLASS_TYPE_P (type1) && NON_UNION_CLASS_TYPE_P (type2)
&& !same_type_ignoring_top_level_qualifiers_p (type1, type2)
- && !COMPLETE_TYPE_P (complete_type (type2)))
+ && !COMPLETE_TYPE_P (type2))
{
error ("incomplete type %qT not allowed", type2);
return error_mark_node;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 045a336..70853cd 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,4 +1,9 @@
-2007-05-31 Paul Thomas <pault@gcc.gnu.org> PR fortran/32103 * gfortran.dg/module_equivalence_3.f90: New test. 2007-05-30 Russell Yanofsky <russ@yanofsky.org>
+2007-05-31 Paolo Carlini <pcarlini@suse.de>
+
+ PR c++/32158
+ * g++.dg/ext/is_pod_incomplete.C: New.
+
+2007-05-31 Russell Yanofsky <russ@yanofsky.org>
Douglas Gregor <doug.gregor@gmail.com>
Pedro Lamarao <pedro.lamarao@mndfck.org>
Howard Hinnant <howard.hinnant@gmail.com>
diff --git a/gcc/testsuite/g++.dg/ext/is_pod_incomplete.C b/gcc/testsuite/g++.dg/ext/is_pod_incomplete.C
new file mode 100644
index 0000000..a30ab1f
--- /dev/null
+++ b/gcc/testsuite/g++.dg/ext/is_pod_incomplete.C
@@ -0,0 +1,8 @@
+// PR c++/32158
+template<typename T>
+ struct A
+ {
+ A() { }
+ };
+
+int t[__is_pod(A<int>)?-1:1];