Author: vedantk Date: Tue Sep 1 22:27:15 2015 New Revision: 246618 URL: http://llvm.org/viewvc/llvm-project?rev=246618&view=rev Log: [Sema] Avoid crash on tag-type mismatch (Fixes PR24610)
Differential Revision: http://reviews.llvm.org/D12444 Modified: cfe/trunk/lib/Sema/SemaDecl.cpp cfe/trunk/test/Sema/enum.c Modified: cfe/trunk/lib/Sema/SemaDecl.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDecl.cpp?rev=246618&r1=246617&r2=246618&view=diff ============================================================================== --- cfe/trunk/lib/Sema/SemaDecl.cpp (original) +++ cfe/trunk/lib/Sema/SemaDecl.cpp Tue Sep 1 22:27:15 2015 @@ -3560,6 +3560,9 @@ void Sema::handleTagNumbering(const TagD void Sema::setTagNameForLinkagePurposes(TagDecl *TagFromDeclSpec, TypedefNameDecl *NewTD) { + if (TagFromDeclSpec->isInvalidDecl()) + return; + // Do nothing if the tag already has a name for linkage purposes. if (TagFromDeclSpec->hasNameForLinkage()) return; Modified: cfe/trunk/test/Sema/enum.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/enum.c?rev=246618&r1=246617&r2=246618&view=diff ============================================================================== --- cfe/trunk/test/Sema/enum.c (original) +++ cfe/trunk/test/Sema/enum.c Tue Sep 1 22:27:15 2015 @@ -119,3 +119,7 @@ void crash(enum E* e) // expected-warnin typedef enum { NegativeShort = (short)-1 } NegativeShortEnum; int NegativeShortTest[NegativeShort == -1 ? 1 : -1]; + +// PR24610 +enum Color { Red, Green, Blue }; // expected-note{{previous use is here}} +typedef struct Color NewColor; // expected-error {{use of 'Color' with tag type that does not match previous declaration}} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits