Kaynağa Gözat

Fix use-after-scope in ASTContext.

Extend lifetime of ExceptionTypeStorage, as it is referenced by
CanonicalEPI and used outside the block (ExceptionSpec.Exceptions is an
ArrayRef)

Patch by Sam McCall!

Differential Revision: https://reviews.llvm.org/D25983

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@285192 91177308-0d34-0410-b5e6-96231b3b80d8
Benjamin Kramer 8 yıl önce
ebeveyn
işleme
674ce2410c
1 değiştirilmiş dosya ile 1 ekleme ve 1 silme
  1. 1 1
      lib/AST/ASTContext.cpp

+ 1 - 1
lib/AST/ASTContext.cpp

@@ -3230,13 +3230,13 @@ QualType ASTContext::getFunctionTypeInternal(
     for (unsigned i = 0; i != NumArgs; ++i)
     for (unsigned i = 0; i != NumArgs; ++i)
       CanonicalArgs.push_back(getCanonicalParamType(ArgArray[i]));
       CanonicalArgs.push_back(getCanonicalParamType(ArgArray[i]));
 
 
+    llvm::SmallVector<QualType, 8> ExceptionTypeStorage;
     FunctionProtoType::ExtProtoInfo CanonicalEPI = EPI;
     FunctionProtoType::ExtProtoInfo CanonicalEPI = EPI;
     CanonicalEPI.HasTrailingReturn = false;
     CanonicalEPI.HasTrailingReturn = false;
 
 
     if (IsCanonicalExceptionSpec) {
     if (IsCanonicalExceptionSpec) {
       // Exception spec is already OK.
       // Exception spec is already OK.
     } else if (NoexceptInType) {
     } else if (NoexceptInType) {
-      llvm::SmallVector<QualType, 8> ExceptionTypeStorage;
       switch (EPI.ExceptionSpec.Type) {
       switch (EPI.ExceptionSpec.Type) {
       case EST_Unparsed: case EST_Unevaluated: case EST_Uninstantiated:
       case EST_Unparsed: case EST_Unevaluated: case EST_Uninstantiated:
         // We don't know yet. It shouldn't matter what we pick here; no-one
         // We don't know yet. It shouldn't matter what we pick here; no-one