[PATCH] D109624: [clang] Make the driver not diagnose errors on nonexistent linker inputs

Nico Weber via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Fri Sep 10 12:16:48 PDT 2021


thakis added inline comments.


================
Comment at: clang/lib/Driver/Driver.cpp:2173
+  // flag. (Users can use `-Wl,` or `/linker` to launder the flag past the
+  // driver in the unlikely case they run into this.)
+  if (Ty == types::TY_Object)
----------------
This means that typo suggestion now works even if you pass `/link`. Before this patch, it didn't:

```
% out/gn/bin/clang-cl /Brepo -### clang/test/Driver/unknown-arg.c /link
clang: error: no such file or directory: '/Brepo'; did you mean '/Brepro'?
```

I suppose this means that before, we unintentionally and silently passed flags that clang-cl didn't know to link.exe even if they were in front of `/link`!  …and we _still_ do this for flags that aren't within editing distance of 1 of existing clang-cl flags:

```
% out/gn/bin/clang-cl clang/test/Driver/unknown-arg.c /asdfasdf -fuse-ld=lld /link
lld-link: error: could not open '/asdfasdf': No such file or directory
```

Now we even do this if there's no `/link` flag:

```
% out/gn/bin/clang-cl clang/test/Driver/unknown-arg.c /libpath:foo -fuse-ld=lld
# fine
```

That's kind of weird! With `-` we do something better:

```
% out/gn/bin/clang-cl clang/test/Driver/unknown-arg.c -libpath:foo -fuse-ld=lld
clang: warning: unknown argument ignored in clang-cl: '-libpath:foo' [-Wunknown-argument]
```

It's the old "things starting with '/' might be path, or might be flag" thing again, and as the --chroot example in this comment shows, it actually might be a path even if no file exists at that particular path. Hrm.


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

https://reviews.llvm.org/D109624



More information about the llvm-commits mailing list