summaryrefslogtreecommitdiffstats
path: root/clang/lib/Parse/ParseExprCXX.cpp
diff options
context:
space:
mode:
authorArgyrios Kyrtzidis <akyrtzi@gmail.com>2011-05-03 18:45:38 +0000
committerArgyrios Kyrtzidis <akyrtzi@gmail.com>2011-05-03 18:45:38 +0000
commit13935670e4595ce414b3d8c947cf79e2f3d78d3c (patch)
tree94b76096d12cfcdf56b32a88eb68b939fee2d90a /clang/lib/Parse/ParseExprCXX.cpp
parent22fc723818baae9415d6fc2b056ae2f3834507d0 (diff)
downloadbcm5719-llvm-13935670e4595ce414b3d8c947cf79e2f3d78d3c.tar.gz
bcm5719-llvm-13935670e4595ce414b3d8c947cf79e2f3d78d3c.zip
Fix a double free when parsing malformed code. Fixes rdar://9173693.
llvm-svn: 130775
Diffstat (limited to 'clang/lib/Parse/ParseExprCXX.cpp')
-rw-r--r--clang/lib/Parse/ParseExprCXX.cpp7
1 files changed, 5 insertions, 2 deletions
diff --git a/clang/lib/Parse/ParseExprCXX.cpp b/clang/lib/Parse/ParseExprCXX.cpp
index 8bf6f63d3ec..eb491ef2bb0 100644
--- a/clang/lib/Parse/ParseExprCXX.cpp
+++ b/clang/lib/Parse/ParseExprCXX.cpp
@@ -280,8 +280,11 @@ bool Parser::ParseOptionalCXXScopeSpecifier(CXXScopeSpec &SS,
: TemplateId->TemplateNameLoc;
SS.SetInvalid(SourceRange(StartLoc, CCLoc));
}
-
- TemplateId->Destroy();
+
+ // If we are caching tokens we will process the TemplateId again,
+ // otherwise destroy it.
+ if (!PP.isBacktrackEnabled())
+ TemplateId->Destroy();
continue;
}
OpenPOWER on IntegriCloud