Author: hans Date: Thu Aug 11 13:16:47 2016 New Revision: 278376 URL: http://llvm.org/viewvc/llvm-project?rev=278376&view=rev Log: Merging r277522: ------------------------------------------------------------------------ r277522 | dcoughlin | 2016-08-02 14:07:23 -0700 (Tue, 02 Aug 2016) | 8 lines
[CFG] Fix crash finding destructor of lifetime-extended temporary. Fix a crash under -Wthread-safety when finding the destructor for a lifetime-extending reference. A patch by Nandor Licker! Differential Revision: https://reviews.llvm.org/D22419 ------------------------------------------------------------------------ Modified: cfe/branches/release_39/ (props changed) cfe/branches/release_39/lib/Analysis/CFG.cpp cfe/branches/release_39/test/SemaCXX/warn-thread-safety-analysis.cpp Propchange: cfe/branches/release_39/ ------------------------------------------------------------------------------ --- svn:mergeinfo (original) +++ svn:mergeinfo Thu Aug 11 13:16:47 2016 @@ -1,4 +1,4 @@ /cfe/branches/type-system-rewrite:134693-134817 -/cfe/trunk:275880,275967,276102,276350,276361,276473,276653,276716,276887,276891,276900,276979,276983,277095,277138,277141,277221,277307,277743,277796-277797,277866,277889,277900,278139,278234-278235 +/cfe/trunk:275880,275967,276102,276350,276361,276473,276653,276716,276887,276891,276900,276979,276983,277095,277138,277141,277221,277307,277522,277743,277796-277797,277866,277889,277900,278139,278234-278235 /cfe/trunk/test:170344 /cfe/trunk/test/SemaTemplate:126920 Modified: cfe/branches/release_39/lib/Analysis/CFG.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/branches/release_39/lib/Analysis/CFG.cpp?rev=278376&r1=278375&r2=278376&view=diff ============================================================================== --- cfe/branches/release_39/lib/Analysis/CFG.cpp (original) +++ cfe/branches/release_39/lib/Analysis/CFG.cpp Thu Aug 11 13:16:47 2016 @@ -3902,7 +3902,17 @@ CFGImplicitDtor::getDestructorDecl(ASTCo case CFGElement::AutomaticObjectDtor: { const VarDecl *var = castAs<CFGAutomaticObjDtor>().getVarDecl(); QualType ty = var->getType(); - ty = ty.getNonReferenceType(); + + // FIXME: See CFGBuilder::addLocalScopeForVarDecl. + // + // Lifetime-extending constructs are handled here. This works for a single + // temporary in an initializer expression. + if (ty->isReferenceType()) { + if (const Expr *Init = var->getInit()) { + ty = getReferenceInitTemporaryType(astContext, Init); + } + } + while (const ArrayType *arrayType = astContext.getAsArrayType(ty)) { ty = arrayType->getElementType(); } Modified: cfe/branches/release_39/test/SemaCXX/warn-thread-safety-analysis.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/branches/release_39/test/SemaCXX/warn-thread-safety-analysis.cpp?rev=278376&r1=278375&r2=278376&view=diff ============================================================================== --- cfe/branches/release_39/test/SemaCXX/warn-thread-safety-analysis.cpp (original) +++ cfe/branches/release_39/test/SemaCXX/warn-thread-safety-analysis.cpp Thu Aug 11 13:16:47 2016 @@ -5160,6 +5160,21 @@ void test3() { } // end namespace GlobalAcquiredBeforeAfterTest +namespace LifetimeExtensionText { + +struct Holder { + virtual ~Holder() throw() {} + int i = 0; +}; + +void test() { + // Should not crash. + const auto &value = Holder().i; +} + +} // end namespace LifetimeExtensionTest + + namespace LockableUnions { union LOCKABLE MutexUnion { _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits