diff options
| author | Matt Beaumont-Gay <matthewbg@google.com> | 2011-08-25 23:22:24 +0000 |
|---|---|---|
| committer | Matt Beaumont-Gay <matthewbg@google.com> | 2011-08-25 23:22:24 +0000 |
| commit | 045bde420bc1fda33aee8610bcc4c0f4608cb2d7 (patch) | |
| tree | d230158f0194fa05d7183d7443b9010eb6ea9115 | |
| parent | 16746d1f97f7ca6fcc6c15cbef5705b8f6ff3418 (diff) | |
| download | bcm5719-llvm-045bde420bc1fda33aee8610bcc4c0f4608cb2d7.tar.gz bcm5719-llvm-045bde420bc1fda33aee8610bcc4c0f4608cb2d7.zip | |
Fix a crash-on-invalid.
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.
llvm-svn: 138601
| -rw-r--r-- | clang/lib/Sema/SemaTemplate.cpp | 2 | ||||
| -rw-r--r-- | clang/test/SemaTemplate/missing-class-keyword-crash.cpp | 7 |
2 files changed, 8 insertions, 1 deletions
diff --git a/clang/lib/Sema/SemaTemplate.cpp b/clang/lib/Sema/SemaTemplate.cpp index a7d74ce7e84..c3d155cc84f 100644 --- a/clang/lib/Sema/SemaTemplate.cpp +++ b/clang/lib/Sema/SemaTemplate.cpp @@ -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/clang/test/SemaTemplate/missing-class-keyword-crash.cpp b/clang/test/SemaTemplate/missing-class-keyword-crash.cpp new file mode 100644 index 00000000000..f0eee2ba2f8 --- /dev/null +++ b/clang/test/SemaTemplate/missing-class-keyword-crash.cpp @@ -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}} |

