awarzynski added a comment.

Thank you all for your input. Let me summarize.

**SUGGESTION 1**
Tweak the wording to clarify that it is Clang-specific. That's a good 
compromise IMO. It highlights that the described semantics apply to Clang only. 
And I'm not aware of any other way to achieve this right now (i.e. without 
intrusive refactoring).

**SUGGESTION 2:**
The description of `-I` in `-help` and `ClangCommandLineReference.rst` are made 
independent of each other (so that `-help` can be tweaked to suit both Clang 
and Flang).

`ClangCommandLineReference.rst` is basically generated from `Options.td`, so 
any modification to Options.td will affect the user-facing docs.

From docs/CMakeLists.txt:

  gen_rst_file_from_td(ClangCommandLineReference.rst -gen-opt-docs 
../include/clang/Driver/ClangOptionDocs.td docs-clang-html)

From ClangOptionDocs.td:

  include "Options.td"

I don't see any straightforward solution here that would allow different 
descriptions for `-I` in `-help` and in the user-facing docs. Not without 
completely refactoring how ClangCommandLineReference.rst is produced.

**SUGGESTION 3**
Ideally, we'd have one help message for `-I` for Clang and another one for 
Flang (in `Options.td`). Unfortunately, AFAIK, there is no easy way to tweak 
the output of `-help`. The current API is quite inflexible in this respect. 
This was brought-up at some point last year [1][2]. From the limited feedback 
I'm guessing that that would also require a major refactor.

**SUGGESTION 4**
We add a new definition for `-I` for Flang, e.g. `def I_for_flang`.

This solves the problem, but adds yet another option definition. Note that 
`libclangDriver` creates only one global list of all options:

- 
https://github.com/llvm/llvm-project/blob/80dee7965dffdfb866afa9d74f3a4a97453708b2/clang/lib/Driver/DriverOptions.cpp#L42-L55
- 
https://github.com/llvm/llvm-project/blob/80dee7965dffdfb866afa9d74f3a4a97453708b2/clang/include/clang/Driver/Options.h#L43-L52

This means that both Flang and Clang will have access to `OPT_I` and 
`OPT_I_for_flang` (C++ options generated from Options.td). These can be hidden 
from the user, but will still be available. Also, this would mean the massive 
table of `libclangDriver` options keeps growing.

Is that how we should proceed moving forward when option names are identical 
for Clang and Flang, but the semantics are slightly different?

[1] https://lists.llvm.org/pipermail/llvm-dev/2020-July/143745.html
[2] https://lists.llvm.org/pipermail/cfe-dev/2020-October/066953.html

**Few final points**
I would really appreciate a compromise that does not require any major 
refactoring in Clang at this stage. 
We are ready to add `-I`to Flang and we have a bunch of patches almost ready 
that depend on it. 
I appreciate that this is just one option, but we are likely to experience more 
inconsistencies like this in the near future.

Also, for reference, output from  `gcc` and `gfortran`:

  -I <dir>                    Add <dir> to the end of the main include path.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D94169

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

Reply via email to