HazardyKnusperkeks wrote:

> > Since I am by no means an expert on Clang, a few questions arose
> > 
> > * As Clang formats the code correctly (no code changes necessary) when 
> > instead of `xor` a different function name e.g. `xooor` is used, I wonder 
> > why `xor` is tokenized as Unary operator in the first place in C?
> > * Is C and C++ using the same tokenizations?
> 
> clang-format formats all C code as C++. Since `xor` is a C++ keyword, it's 
> lexed as `tok::caret`, which is then erroneously annotated as 
> `TT_UnaryOperator`. This bug was uncovered by #90161.
> 
> > * How to properly distinguish between the C and C++ language in Clang 
> > Format?
> 
> clang-format can't do it properly. @mydeveloperday, @HazardyKnusperkeks, and 
> @rymiel may know more about why we didn't add `LK_C` to the 
> [`Language`](https://clang.llvm.org/docs/ClangFormatStyleOptions.html#language)
>  option.

If I remember correctly, I was in favor of adding a C language.


> Because if this code was in a .h and not a .c you wouldn't know what language 
> you were in

There are certainly headers which are ambiguous, and we could add an option to 
set the language of such headers. But if we hit a `class`, `namespace`, or a 
`::` we could fairly certain use it as C++ header. Similar to `guessIsObjC`, 
and skip checking for C++ if the new option is set to C++ (which of course 
would be the default, to keep existing behavior).

https://github.com/llvm/llvm-project/pull/92741
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to