[cfe-dev] clang -cc1: confusing behaviour with multiple actions
Andrzej Warzynski via cfe-dev
cfe-dev at lists.llvm.org
Tue Oct 19 04:57:48 PDT 2021
hello,
Clang's frontend driver, `clang -cc1`, will only run one action at a
time. If multiple action options [1] are specified, only the rightmost
one is run [2]. So in the following invocation, only `-dump-tokens` will
be used:
```lang=bash
clang -cc1 -ast-dump -dump-tokens file.c
```
Conversely, only `-ast-dump` will be run below:
```lang=bash
clang -cc1 -dump-tokens -ast-dump file.c
```
No warning or error is issued, which is a bit counter-intuitive. Also,
with one-action-at-a-time rule, only one type of information can be
dumped per invocation (as in the example above). Is there any particular
reason not to warn users (or to error out) when multiple actions are
specified? And why not allow multiple "dump" options per invocation?
Flang's frontend driver exhibits similar behaviour - we've been
discussing this on flang-dev [3]. We've considered extending the
`ArgList` API to for such scenarios (https://reviews.llvm.org/D111781),
but I'm not sure whether that's the right approach. Also, I wanted to
better understand the rationale in Clang first.
Thank you for reading!
-Andrzej
[1] Options decorated with `Action_Group` in Options.td
(https://github.com/llvm/llvm-project/blob/main/clang/include/clang/Driver/Options.td#L87-L88)
[2]
https://github.com/llvm/llvm-project/blob/main/clang/lib/Frontend/CompilerInvocation.cpp#L2635
[3] https://lists.llvm.org/pipermail/flang-dev/2021-October/000822.html
More information about the cfe-dev
mailing list