Ultimately they probably shouldn't map to the same toolchain and we can use that as a key. Looks OK for now though.
On Fri, Jan 15, 2016, 5:48 PM Justin Lebar <jle...@google.com> wrote: > jlebar created this revision. > jlebar added a reviewer: tra. > jlebar added subscribers: cfe-commits, beanz, echristo. > Herald added a subscriber: aemerson. > > It's possible to BindArch without changing the toolchain at all. For > example, armv7 and armv7s have exactly the same triple. > > Therefore the code in the Driver that checks that we're not creating a > job for the same Action twice needs to consider (Action, Toolchain, > BoundArch) tuples. > > http://reviews.llvm.org/D16250 > > Files: > include/clang/Driver/Driver.h > lib/Driver/Driver.cpp > test/Driver/darwin-multiarch-arm.c > > Index: test/Driver/darwin-multiarch-arm.c > =================================================================== > --- /dev/null > +++ test/Driver/darwin-multiarch-arm.c > @@ -0,0 +1,18 @@ > +// Check that we compile correctly with multiple ARM -arch options. > +// > +// RUN: %clang -target arm7-apple-darwin10 -### \ > +// RUN: -arch armv7 -arch armv7s %s 2>&1 | FileCheck %s > + > +// CHECK: "-cc1" "-triple" "thumbv7-apple-ios5.0.0" > +// CHECK-SAME: "-o" "[[CC_OUT1:[^"]*]]" > +// CHECK:ld > +// CHECK-SAME: "-o" "[[LD_OUT1:[^"]*]]" > +// CHECK-SAME: "[[CC_OUT1]]" > +// CHECK:"-cc1" "-triple" "thumbv7s-apple-ios5.0.0" > +// CHECK-SAME: "-o" "[[CC_OUT2:[^"]*]]" > +// CHECK:ld > +// CHECK-SAME: "-o" "[[LD_OUT2:[^"]*]]" > +// CHECK-SAME: "[[CC_OUT2]]" > +// CHECK:lipo > +// CHECK-DAG: "[[LD_OUT1]]" > +// CHECK-DAG: "[[LD_OUT2]]" > Index: lib/Driver/Driver.cpp > =================================================================== > --- lib/Driver/Driver.cpp > +++ lib/Driver/Driver.cpp > @@ -1803,8 +1803,15 @@ > bool AtTopLevel, bool MultipleArchs, const char *LinkingOutput, > std::map<std::pair<const Action *, std::string>, InputInfo> > &CachedResults) > const { > - std::pair<const Action *, std::string> ActionTC = { > - A, TC->getTriple().normalize()}; > + // The bound arch is not necessarily represented in the toolchain's > triple -- > + // for example, armv7 and armv7s both map to the same triple -- so we > need > + // both in our map. > + std::string TriplePlusArch = TC->getTriple().normalize(); > + if (BoundArch) { > + TriplePlusArch += "-"; > + TriplePlusArch += BoundArch; > + } > + std::pair<const Action *, std::string> ActionTC = {A, TriplePlusArch}; > auto CachedResult = CachedResults.find(ActionTC); > if (CachedResult != CachedResults.end()) { > return CachedResult->second; > Index: include/clang/Driver/Driver.h > =================================================================== > --- include/clang/Driver/Driver.h > +++ include/clang/Driver/Driver.h > @@ -380,9 +380,9 @@ > const llvm::opt::ArgList &Args, phases::ID > Phase, > Action *Input) const; > > - /// BuildJobsForAction - Construct the jobs to perform for the > - /// action \p A and return an InputInfo for the result of running \p A. > - /// Will only construct jobs for a given (Action, ToolChain) pair once. > + /// BuildJobsForAction - Construct the jobs to perform for the action > \p A and > + /// return an InputInfo for the result of running \p A. Will only > construct > + /// jobs for a given (Action, ToolChain, BoundArch) tuple once. > InputInfo BuildJobsForAction(Compilation &C, const Action *A, > const ToolChain *TC, const char *BoundArch, > bool AtTopLevel, bool MultipleArchs, > > >
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits