OSDN Git Service

PR c++/49085
authorjason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 1 Jul 2011 13:36:17 +0000 (13:36 +0000)
committerjason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 1 Jul 2011 13:36:17 +0000 (13:36 +0000)
* semantics.c (finish_offsetof): Complain about incomplete type.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@175758 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/cp/ChangeLog
gcc/cp/semantics.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/template/offsetof2.C [new file with mode: 0644]

index cc95078..842d049 100644 (file)
@@ -1,3 +1,8 @@
+2011-07-01  Jason Merrill  <jason@redhat.com>
+
+       PR c++/49085
+       * semantics.c (finish_offsetof): Complain about incomplete type.
+
 2011-06-30  Jason Merrill  <jason@redhat.com>
 
        PR c++/49387
index ad68a01..a704aa3 100644 (file)
@@ -3422,6 +3422,12 @@ finish_offsetof (tree expr)
     }
   if (REFERENCE_REF_P (expr))
     expr = TREE_OPERAND (expr, 0);
+  if (TREE_CODE (expr) == COMPONENT_REF)
+    {
+      tree object = TREE_OPERAND (expr, 0);
+      if (!complete_type_or_else (TREE_TYPE (object), object))
+       return error_mark_node;
+    }
   return fold_offsetof (expr, NULL_TREE);
 }
 
index 857ed56..8f2053a 100644 (file)
@@ -1,3 +1,8 @@
+2011-07-01  Jason Merrill  <jason@redhat.com>
+
+       PR c++/49085
+       * g++.dg/template/offsetof2.C: New.
+
 2011-07-01  Kai Tietz  <ktietz@redhat.com>
 
         * gcc.dg/tree-ssa/bitwise-sink.c: New test.
diff --git a/gcc/testsuite/g++.dg/template/offsetof2.C b/gcc/testsuite/g++.dg/template/offsetof2.C
new file mode 100644 (file)
index 0000000..da888f7
--- /dev/null
@@ -0,0 +1,10 @@
+// PR c++/49085
+
+template <class T>
+struct A                       // { dg-error "declaration" }
+{
+  int i, j;
+  int ar[__builtin_offsetof(A,j)]; // { dg-error "incomplete type" }
+};
+
+A<int> a;