diff options
| author | Richard Smith <richard-llvm@metafoo.co.uk> | 2014-07-23 20:07:08 +0000 |
|---|---|---|
| committer | Richard Smith <richard-llvm@metafoo.co.uk> | 2014-07-23 20:07:08 +0000 |
| commit | a507bfc6b99ae8e187c1b5b952ac48c0fa7f00ef (patch) | |
| tree | 7a7764bdf6d8aad2dd9a4ab9e16acd6f3bd3926b /clang/lib | |
| parent | 9e112443b619b8da6050a70b1625a3e890bc15c3 (diff) | |
| download | bcm5719-llvm-a507bfc6b99ae8e187c1b5b952ac48c0fa7f00ef.tar.gz bcm5719-llvm-a507bfc6b99ae8e187c1b5b952ac48c0fa7f00ef.zip | |
PR20228: don't retain a pointer to a vector element after the container has been resized.
llvm-svn: 213790
Diffstat (limited to 'clang/lib')
| -rw-r--r-- | clang/lib/Sema/SemaExprCXX.cpp | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/clang/lib/Sema/SemaExprCXX.cpp b/clang/lib/Sema/SemaExprCXX.cpp index 7fe5e7a4bfa..2745a8cbe3a 100644 --- a/clang/lib/Sema/SemaExprCXX.cpp +++ b/clang/lib/Sema/SemaExprCXX.cpp @@ -3651,12 +3651,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); |

