Author: ibiryukov Date: Wed Jul 4 01:50:12 2018 New Revision: 336244 URL: http://llvm.org/viewvc/llvm-project?rev=336244&view=rev Log: [Sema] Fix crash in getConstructorName.
Summary: Can happen when getConstructorName is called on invalid decls, specifically the ones that do not have the injected class name. Reviewers: bkramer, rsmith Reviewed By: rsmith Subscribers: cfe-commits Differential Revision: https://reviews.llvm.org/D48880 Added: cfe/trunk/test/SemaCXX/injected-class-name-crash.cpp Modified: cfe/trunk/lib/Sema/SemaExprCXX.cpp Modified: cfe/trunk/lib/Sema/SemaExprCXX.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaExprCXX.cpp?rev=336244&r1=336243&r2=336244&view=diff ============================================================================== --- cfe/trunk/lib/Sema/SemaExprCXX.cpp (original) +++ cfe/trunk/lib/Sema/SemaExprCXX.cpp Wed Jul 4 01:50:12 2018 @@ -113,6 +113,8 @@ ParsedType Sema::getConstructorName(Iden break; } } + if (!InjectedClassName && CurClass->isInvalidDecl()) + return ParsedType(); assert(InjectedClassName && "couldn't find injected class name"); QualType T = Context.getTypeDeclType(InjectedClassName); Added: cfe/trunk/test/SemaCXX/injected-class-name-crash.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/injected-class-name-crash.cpp?rev=336244&view=auto ============================================================================== --- cfe/trunk/test/SemaCXX/injected-class-name-crash.cpp (added) +++ cfe/trunk/test/SemaCXX/injected-class-name-crash.cpp Wed Jul 4 01:50:12 2018 @@ -0,0 +1,11 @@ +// RUN: %clang_cc1 -fsyntax-only -verify %s + +template <class T> +struct X : public Foo<Bar { // expected-error {{unknown template name 'Foo'}} expected-error {{use of undeclared identifier 'Bar'}} + X(); +}; // expected-error {{expected '{' after base class list}} + + +template <class T> +X<T>::X() { +} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits