]> granicus.if.org Git - clang/commitdiff
Teach RequireCompleteType about multi-dimensional arrays. Fixes
authorDouglas Gregor <dgregor@apple.com>
Mon, 23 Apr 2012 16:42:52 +0000 (16:42 +0000)
committerDouglas Gregor <dgregor@apple.com>
Mon, 23 Apr 2012 16:42:52 +0000 (16:42 +0000)
<rdar://problem/11284902>.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@155356 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Sema/SemaType.cpp
test/SemaObjCXX/ivar-construct.mm

index d0906ded0cbbbe947dad9c9c20c443f8bdc0b975..1b95f05c79a3ec56104a9beadda7bd5a965ec5f6 100644 (file)
@@ -4195,7 +4195,8 @@ bool Sema::RequireCompleteType(SourceLocation Loc, QualType T,
   // class template specialization, or an array with known size of such,
   // try to instantiate it.
   QualType MaybeTemplate = T;
-  if (const ConstantArrayType *Array = Context.getAsConstantArrayType(T))
+  while (const ConstantArrayType *Array
+           = Context.getAsConstantArrayType(MaybeTemplate))
     MaybeTemplate = Array->getElementType();
   if (const RecordType *Record = MaybeTemplate->getAs<RecordType>()) {
     if (ClassTemplateSpecializationDecl *ClassTemplateSpec
index 535d2a0217ff71b8f23ba8e9848b8ef6bf75044c..a066fca3595a2f83d6908b6fb3cde0100932578c 100644 (file)
@@ -27,3 +27,11 @@ struct Z; // expected-note{{forward declaration}}
 
 @implementation B
 @end
+
+// <rdar://problem/11284902>
+template<typename T> struct Incomplete; // expected-note{{declared here}}
+
+@interface C {
+  Incomplete<int> a[4][4][4]; // expected-error{{implicit instantiation of undefined template 'Incomplete<int>'}}
+}
+@end