]> granicus.if.org Git - clang/commitdiff
Driver: Free synthesized derived arguments.
authorDaniel Dunbar <daniel@zuster.org>
Thu, 11 Mar 2010 18:04:53 +0000 (18:04 +0000)
committerDaniel Dunbar <daniel@zuster.org>
Thu, 11 Mar 2010 18:04:53 +0000 (18:04 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@98262 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Driver/ArgList.h
lib/Driver/ArgList.cpp

index ab1abff7409b9a27106c98e33a2937b79b60f605..0a8eaeaf238fe9f6f6bc97c45ec4988e0f4aeb59 100644 (file)
@@ -287,7 +287,7 @@ namespace driver {
     arglist_type ActualArgs;
 
     /// The list of arguments we synthesized.
-    arglist_type SynthesizedArgs;
+    mutable arglist_type SynthesizedArgs;
 
     /// Is this only a proxy for the base ArgList?
     bool OnlyProxy;
index 07d24c9410fea2766f03071d7da58009e0b5437f..95805b016b1f6c9356c94af09dfc61d05408fe05 100644 (file)
@@ -218,23 +218,30 @@ const char *DerivedArgList::MakeArgString(llvm::StringRef Str) const {
 }
 
 Arg *DerivedArgList::MakeFlagArg(const Arg *BaseArg, const Option *Opt) const {
-  return new FlagArg(Opt, BaseArgs.MakeIndex(Opt->getName()), BaseArg);
+  Arg *A = new FlagArg(Opt, BaseArgs.MakeIndex(Opt->getName()), BaseArg);
+  SynthesizedArgs.push_back(A);
+  return A;
 }
 
 Arg *DerivedArgList::MakePositionalArg(const Arg *BaseArg, const Option *Opt,
                                        llvm::StringRef Value) const {
-  return new PositionalArg(Opt, BaseArgs.MakeIndex(Value), BaseArg);
+  Arg *A = new PositionalArg(Opt, BaseArgs.MakeIndex(Value), BaseArg);
+  SynthesizedArgs.push_back(A);
+  return A;
 }
 
 Arg *DerivedArgList::MakeSeparateArg(const Arg *BaseArg, const Option *Opt,
                                      llvm::StringRef Value) const {
-  return new SeparateArg(Opt, BaseArgs.MakeIndex(Opt->getName(), Value), 1,
-                         BaseArg);
+  Arg *A = new SeparateArg(Opt, BaseArgs.MakeIndex(Opt->getName(), Value), 1,
+                           BaseArg);
+  SynthesizedArgs.push_back(A);
+  return A;
 }
 
 Arg *DerivedArgList::MakeJoinedArg(const Arg *BaseArg, const Option *Opt,
                                    llvm::StringRef Value) const {
-  std::string Joined(Opt->getName());
-  Joined += Value;
-  return new JoinedArg(Opt, BaseArgs.MakeIndex(Joined.c_str()), BaseArg);
+  Arg *A = new JoinedArg(Opt, BaseArgs.MakeIndex(Opt->getName() + Value.str()),
+                         BaseArg);
+  SynthesizedArgs.push_back(A);
+  return A;
 }