Don't leak invalid RegexDirectives. Probably a small part of PR19520.

llvm-svn: 207077
This commit is contained in:
Nico Weber 2014-04-24 05:32:03 +00:00
parent aacf0313a5
commit 568dacc4aa
1 changed files with 6 additions and 4 deletions

View File

@ -491,11 +491,12 @@ static bool ParseDirective(StringRef S, ExpectedData *ED, SourceManager &SM,
}
// Construct new directive.
Directive *D = Directive::create(RegexKind, Pos, ExpectedLoc, Text,
Min, Max);
std::unique_ptr<Directive> D(
Directive::create(RegexKind, Pos, ExpectedLoc, Text, Min, Max));
std::string Error;
if (D->isValid(Error)) {
DL->push_back(D);
DL->push_back(D.release());
FoundDirective = true;
} else {
Diags.Report(Pos.getLocWithOffset(ContentBegin-PH.Begin),
@ -880,5 +881,6 @@ Directive *Directive::create(bool RegexKind, SourceLocation DirectiveLoc,
}
}
return new RegexDirective(DirectiveLoc, DiagnosticLoc, Text, Min, Max, RegexStr);
return new RegexDirective(DirectiveLoc, DiagnosticLoc, Text, Min, Max,
RegexStr);
}