sammccall added a comment.

Sorry, code reviews are racy :-)



================
Comment at: clang-tools-extra/clangd/QueryDriverDatabase.cpp:134
     elog("System include extraction: end marker missing: {0}", Output);
-    return {};
-  }
-
-  for (llvm::StringRef Line : llvm::make_range(StartIt, EndIt)) {
-    SystemIncludes.push_back(Line.trim().str());
-    vlog("System include extraction: adding {0}", Line);
+    return llvm::None;
   }
----------------
ArcsinX wrote:
> Unsure about this.
> Should we toss all collected data if end markes was not found?
Yup, at least for this patch (this is the existing behavior).
I think the logic is "this is a fragile text protocol, we've never seen this 
happen, so don't really know what it would mean".


================
Comment at: clang-tools-extra/clangd/QueryDriverDatabase.cpp:212
+  if (!Target.empty()) {
+    Cmd.CommandLine.push_back("-target");
+    Cmd.CommandLine.push_back(Target);
----------------
sammccall wrote:
> kadircet wrote:
> > ArcsinX wrote:
> > > ArcsinX wrote:
> > > > kadircet wrote:
> > > > > sammccall wrote:
> > > > > > `clang -target foo test.cc` seems to be a hard error in the driver 
> > > > > > if the target is unknown.
> > > > > > (vs likely *some* functionality if we just didn't set the driver)
> > > > > > 
> > > > > > so this could regress some scenarios. Can we mitigate that?
> > > > > > (It's possible that we're running the driver in a mode where we 
> > > > > > proceed anyway, but I can't remember :-()
> > > > > what if target already exists in `Cmd`?
> > > > > 
> > > > > also it would be nice to use `--target=X` format to be consistent 
> > > > > with target inference from invocation name as in 
> > > > > https://github.com/llvm/llvm-project/blob/master/clang/lib/Tooling/Tooling.cpp#L278.
> > > > I failed to find options to process in case of invalid target,  so 
> > > > added target validation.
> > > We could specify several --target options, the last one will be used. But 
> > > I am not sure should we override existing or not.
> > > We could specify several --target options, the last one will be used. But 
> > > I am not sure should we override existing or not.
> > 
> > Having multiple targets sounds confusing. I would prefer keeping a target 
> > specifically mentioned by the user but it is also possible for the target 
> > to be inferred by clang (and that might be wrong). This is similar to our 
> > stand against predefined macros though, i think we should fix clang's 
> > inference logic if it has any false positives. So i am slightly leaning 
> > towards not overriding the target if it exists.
> I think the question of "target already explicitly set" should probably be 
> answered.
> Checking for an arg equal to "-target" or beginning with "--target" is 
> probably enough.
I think we should definitely not override the target if it already exists.

The scenario is: compile_commands.json has `/my/driver --target=bar foo.cc`.
`/my/driver reports "Target: foo"`

So foo is the default target, but it's being overridden on the command-line as 
part of the build.

Now if we add the extracted target to the end of the compile command, to 
produce `/my/driver --target=bar foo.cc --target=foo`, we're effectively 
reversing the precedence: now the default target is used even if the compile 
command overrode it.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D92012/new/

https://reviews.llvm.org/D92012

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to