]> granicus.if.org Git - clang/commitdiff
[Sema] Remove assert in TreeTransform<Derived>::TransformObjCObjectType.
authorAkira Hatanaka <ahatanaka@apple.com>
Thu, 25 Feb 2016 07:08:33 +0000 (07:08 +0000)
committerAkira Hatanaka <ahatanaka@apple.com>
Thu, 25 Feb 2016 07:08:33 +0000 (07:08 +0000)
The assert isn't correct since TypeLoc::ObjCObjectTypeLoc doesn't
indicate whether the type is a dependent type. The function returns
false for a type like "<SomeProtocol>" which is a synonym for
"id<SomeProtocol>".

rdar://problem/23838912

Differential Revision: http://reviews.llvm.org/D17355

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

lib/Sema/TreeTransform.h
test/SemaObjCXX/base-type-as-written.mm [new file with mode: 0644]

index 624839cc944e6c83ee75ba4e5d87654660d60787..627165fa2c79062d690f527b901f7e701eadd2ba 100644 (file)
@@ -5932,7 +5932,6 @@ TreeTransform<Derived>::TransformObjCObjectType(TypeLocBuilder &TLB,
   }
 
   ObjCObjectTypeLoc NewT = TLB.push<ObjCObjectTypeLoc>(Result);
-  assert(TL.hasBaseTypeAsWritten() && "Can't be dependent");
   NewT.setHasBaseTypeAsWritten(true);
   NewT.setTypeArgsLAngleLoc(TL.getTypeArgsLAngleLoc());
   for (unsigned i = 0, n = TL.getNumTypeArgs(); i != n; ++i)
diff --git a/test/SemaObjCXX/base-type-as-written.mm b/test/SemaObjCXX/base-type-as-written.mm
new file mode 100644 (file)
index 0000000..05962e3
--- /dev/null
@@ -0,0 +1,9 @@
+// RUN: %clang_cc1 -fsyntax-only -verify %s
+// Make sure we don't crash in TreeTransform<Derived>::TransformObjCObjectType.
+
+@protocol P1
+@end
+
+template <class T1><P1> foo1(T1) { // expected-warning {{protocol has no object type specified; defaults to qualified 'id'}}
+  foo1(0);
+}