hamzasood marked 10 inline comments as done.
hamzasood added inline comments.
================
Comment at: lib/Tooling/InterpolatingCompilationDatabase.cpp:124
+// Determine whether the given file path is the clang-cl executable.
+static bool checkIsCLMode(const std::vector<std::string> &CmdLine,
+ const llvm::opt::OptTable &OptTable) {
----------------
hamzasood wrote:
> sammccall wrote:
> > nit: a two-value enum would be clearer and allow for terser variable names
> > (`Mode`)
> The advantage of a Boolean is that it makes the checks simpler. E.g. `if
> (isCL)` instead of `if (mode == DriverMode::CL)` or something.
>
> Happy to change it though if you still disagree.
Also, there're more than just 2 driver modes. But we only care about cl and not
cl.
================
Comment at: lib/Tooling/InterpolatingCompilationDatabase.cpp:156
+
+ // Transform the command line to an llvm ArgList.
+ // Make sure that OldArgs lives for at least as long as this variable as
the
----------------
hamzasood wrote:
> sammccall wrote:
> > would you mind reverting this change and just wrapping the old Argv in an
> > InputArgList?
> > I'm not sure the lifetime comments and std::transform aid readability here.
> The change was more about safety than readability. The old approach left an
> InputArgList of dangling pointers after moving the new args into the cmd
> object. This way there’s no way to accidentally access deallocated memory by
> using the InputArgList.
>
> As above, happy to change if you still disagree.
I've restructured it so hopefully this is less of a concern.
================
Comment at: unittests/Tooling/CompilationDatabaseTest.cpp:652
+
+class InterpolateTest
+ : public ::testing::TestWithParam<std::tuple<DriverExe, DriverMode>> {
----------------
hamzasood wrote:
> sammccall wrote:
> > I'm not sure the parameterized test is the right model here.
> > The `INSTANTIATE_TEST_P` and friends makes the test fixture pretty
> > complicated, and failure messages hard to relate to input conditions.
> > Then the actual tests have a bunch of assertions conditional on which mode
> > we're in.
> > Finally, we don't actually test any mixed-mode database.
> >
> > Could we write this a little more directly?:
> > - pass the driver mode flag to `add()` in the normal way, in the Flags
> > param
> > - require callers to "add" to pass "clang" or "clang-cl". (It's OK that
> > this makes existing cases a bit more verbose)
> > - explicitly test the clang-cl and --driver-mode cases we care about,
> > rather than running every assertion in every configuration
> >
> > e.g.
> > ```
> > TEST_F(InterpolateTest, ClangCL) {
> > add("foo.cc", "clang");
> > add("bar.cc", "clang-cl");
> > add("baz.cc", "clang --driver-mode=clang-cl");
> >
> > EXPECT_EQ(getCommand("a/bar.h"), "clang-cl -D a/baz.cc /TP");
> > }
> > ```
> The intent was to make sure that the existing cases (that shouldn’t depend on
> the driver mode) don’t break, which admittedly happened while I was working
> on the patch.
>
> Most of the tests aren’t conditional on the mode, and I think it’s important
> that they’re tested in all configurations. The parameterisation also lets us
> test as `clang-cl`, `clang-cl —driver-mode=cl`, and `clang —driver-mode=cl`.
> Which are all valid ways of using CL mode.
To clarify: the parameterisation runs the test 6 times. The `isTestingCL()`
check narrows that down to 3.
https://reviews.llvm.org/D51321
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits