diff options
author | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2011-05-03 18:45:38 +0000 |
---|---|---|
committer | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2011-05-03 18:45:38 +0000 |
commit | eccce7e246a17e12a2afd6eabb9ac7c8d582db4e (patch) | |
tree | 1ea34e117fa6e12565cc98b3f9cc74831e01eac3 /lib/Parse/ParseExprCXX.cpp | |
parent | 0f4be74ff0273e505d383f89174ef539828424ed (diff) |
Fix a double free when parsing malformed code. Fixes rdar://9173693.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@130775 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Parse/ParseExprCXX.cpp')
-rw-r--r-- | lib/Parse/ParseExprCXX.cpp | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/lib/Parse/ParseExprCXX.cpp b/lib/Parse/ParseExprCXX.cpp index 8bf6f63d3e..eb491ef2bb 100644 --- a/lib/Parse/ParseExprCXX.cpp +++ b/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; } |