diff options
author | Hans Wennborg <hans@hanshq.net> | 2014-05-02 22:55:30 +0000 |
---|---|---|
committer | Hans Wennborg <hans@hanshq.net> | 2014-05-02 22:55:30 +0000 |
commit | 55362851a90b381f03db94e01049ab8b61619f1e (patch) | |
tree | e68e958305bd1328dc1ea868a9cfe623907ed4b4 | |
parent | fb4e3f2f4e8c15425a1d23aadc1149d0531662f6 (diff) | |
download | bcm5719-llvm-55362851a90b381f03db94e01049ab8b61619f1e.tar.gz bcm5719-llvm-55362851a90b381f03db94e01049ab8b61619f1e.zip |
Fix clang-cl Driver leak
We were synthesizing new arguments from e.g. '/Tcfile.c' arguments,
but didn't handle ownership correctly.
llvm-svn: 207880
-rw-r--r-- | clang/include/clang/Driver/Driver.h | 2 | ||||
-rw-r--r-- | clang/lib/Driver/Driver.cpp | 5 |
2 files changed, 4 insertions, 3 deletions
diff --git a/clang/include/clang/Driver/Driver.h b/clang/include/clang/Driver/Driver.h index 044872591f5..960e5c019af 100644 --- a/clang/include/clang/Driver/Driver.h +++ b/clang/include/clang/Driver/Driver.h @@ -259,7 +259,7 @@ public: /// \param Args - The input arguments. /// \param Inputs - The list to store the resulting compilation /// inputs onto. - void BuildInputs(const ToolChain &TC, const llvm::opt::DerivedArgList &Args, + void BuildInputs(const ToolChain &TC, llvm::opt::DerivedArgList &Args, InputList &Inputs) const; /// BuildActions - Construct the list of actions to perform for the diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp index a238e37c1db..44c41b6b694 100644 --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -190,10 +190,11 @@ const { return FinalPhase; } -static Arg* MakeInputArg(const DerivedArgList &Args, OptTable *Opts, +static Arg* MakeInputArg(DerivedArgList &Args, OptTable *Opts, StringRef Value) { Arg *A = new Arg(Opts->getOption(options::OPT_INPUT), Value, Args.getBaseArgs().MakeIndex(Value), Value.data()); + Args.AddSynthesizedArg(A); A->claim(); return A; } @@ -956,7 +957,7 @@ static bool DiagnoseInputExistence(const Driver &D, const DerivedArgList &Args, } // Construct a the list of inputs and their types. -void Driver::BuildInputs(const ToolChain &TC, const DerivedArgList &Args, +void Driver::BuildInputs(const ToolChain &TC, DerivedArgList &Args, InputList &Inputs) const { // Track the current user specified (-x) input. We also explicitly track the // argument used to set the type; we only want to claim the type when we |