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
This commit is contained in:
Argyrios Kyrtzidis 2011-05-03 18:45:38 +00:00
Родитель 0f4be74ff0
Коммит eccce7e246
2 изменённых файлов: 11 добавлений и 2 удалений

Просмотреть файл

@ -280,8 +280,11 @@ bool Parser::ParseOptionalCXXScopeSpecifier(CXXScopeSpec &SS,
: TemplateId->TemplateNameLoc; : TemplateId->TemplateNameLoc;
SS.SetInvalid(SourceRange(StartLoc, CCLoc)); 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; continue;
} }

Просмотреть файл

@ -0,0 +1,6 @@
// RUN: %clang_cc1 -fsyntax-only -verify %s
// <rdar://problem/9173693>
template< bool C > struct assert { };
template< bool > struct assert_arg_pred_impl { }; // expected-note 3 {{declared here}}
template< typename Pred > assert<false> assert_not_arg( void (*)(Pred), typename assert_arg_pred<Pred>::type ); // expected-error 5 {{}}