]> granicus.if.org Git - clang/commitdiff
Fix a crash-on-invalid.
authorMatt Beaumont-Gay <matthewbg@google.com>
Thu, 25 Aug 2011 23:22:24 +0000 (23:22 +0000)
committerMatt Beaumont-Gay <matthewbg@google.com>
Thu, 25 Aug 2011 23:22:24 +0000 (23:22 +0000)
Much to everyone's surprise, the default constructor for TypeResult produces
an instance with Invalid == false. This seems like a decision we may want to
revisit.

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

lib/Sema/SemaTemplate.cpp
test/SemaTemplate/missing-class-keyword-crash.cpp [new file with mode: 0644]

index a7d74ce7e84cef2178e3c5aedf92cf112e80761f..c3d155cc84f0ae5be90eaf149e12310f77933dc5 100644 (file)
@@ -2131,7 +2131,7 @@ TypeResult Sema::ActOnTagTemplateIdType(TagUseKind TUK,
   
   QualType Result = CheckTemplateIdType(Template, TemplateLoc, TemplateArgs);
   if (Result.isNull())
-    return TypeResult();
+    return TypeResult(true);
   
   // Check the tag kind
   if (const RecordType *RT = Result->getAs<RecordType>()) {
diff --git a/test/SemaTemplate/missing-class-keyword-crash.cpp b/test/SemaTemplate/missing-class-keyword-crash.cpp
new file mode 100644 (file)
index 0000000..f0eee2b
--- /dev/null
@@ -0,0 +1,7 @@
+// RUN: %clang_cc1 -fsyntax-only -verify %s
+class G {};
+template <Foo> // expected-error{{unknown type name 'Foo'}} \
+               // expected-note{{template parameter is declared here}}
+class Bar {};
+
+class Bar<G> blah_test; // expected-error{{template argument for non-type template parameter must be an expression}}