Pull in r213790 from upstream clang trunk (by Richard Smith):
PR20228: don't retain a pointer to a vector element after the container has been resized. This fixes a possible crash when compiling certain parts of libc++'s type_traits header.
This commit is contained in:
parent
96234b61c4
commit
ec84358430
@ -3642,12 +3642,13 @@ static bool evaluateTypeTrait(Sema &S, TypeTrait Kind, SourceLocation KWLoc,
|
||||
if (T->isObjectType() || T->isFunctionType())
|
||||
T = S.Context.getRValueReferenceType(T);
|
||||
OpaqueArgExprs.push_back(
|
||||
OpaqueValueExpr(Args[I]->getTypeLoc().getLocStart(),
|
||||
OpaqueValueExpr(Args[I]->getTypeLoc().getLocStart(),
|
||||
T.getNonLValueExprType(S.Context),
|
||||
Expr::getValueKindForType(T)));
|
||||
ArgExprs.push_back(&OpaqueArgExprs.back());
|
||||
}
|
||||
|
||||
for (Expr &E : OpaqueArgExprs)
|
||||
ArgExprs.push_back(&E);
|
||||
|
||||
// Perform the initialization in an unevaluated context within a SFINAE
|
||||
// trap at translation unit scope.
|
||||
EnterExpressionEvaluationContext Unevaluated(S, Sema::Unevaluated);
|
||||
|
Loading…
Reference in New Issue
Block a user