r338749 - Work around more GCC miscompiles exposed by r338464.
Martin Storsjo via cfe-commits
cfe-commits at lists.llvm.org
Thu Aug 2 11:12:08 PDT 2018
Author: mstorsjo
Date: Thu Aug 2 11:12:08 2018
New Revision: 338749
URL: http://llvm.org/viewvc/llvm-project?rev=338749&view=rev
Log:
Work around more GCC miscompiles exposed by r338464.
This is the same fix as in r338478, for another occurrance of the
same pattern from r338464.
See gcc.gnu.org/PR86769 for details of the bug.
Modified:
cfe/trunk/lib/Sema/SemaInit.cpp
Modified: cfe/trunk/lib/Sema/SemaInit.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaInit.cpp?rev=338749&r1=338748&r2=338749&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/SemaInit.cpp (original)
+++ cfe/trunk/lib/Sema/SemaInit.cpp Thu Aug 2 11:12:08 2018
@@ -6371,8 +6371,12 @@ static bool implicitObjectParamIsLifetim
const TypeSourceInfo *TSI = FD->getTypeSourceInfo();
if (!TSI)
return false;
+ // Don't declare this variable in the second operand of the for-statement;
+ // GCC miscompiles that by ending its lifetime before evaluating the
+ // third operand. See gcc.gnu.org/PR86769.
+ AttributedTypeLoc ATL;
for (TypeLoc TL = TSI->getTypeLoc();
- auto ATL = TL.getAsAdjusted<AttributedTypeLoc>();
+ (ATL = TL.getAsAdjusted<AttributedTypeLoc>());
TL = ATL.getModifiedLoc()) {
if (ATL.getAttrKind() == AttributedType::attr_lifetimebound)
return true;
More information about the cfe-commits
mailing list