ojhunt wrote:

> > The same problem seems to affect `ptrauth_qualifier` with the PAuth ABI. 
> > For example, consider this TU:
> 
> That's a similar ODR violation, but they also have a bug; `__ptrauth` is 
> failing to emit a pedantic diagnostic for use of the extension at all. I 
> think it's a different situation because there the user is explicitly writing 
> code to use the extension.
> 

Obviously more details in the other PRs for making the ptrauth_qualifier a 
feature or disabling -pedantic-errors when pointer auth is enabled: the problem 
here is that `-pedantic-errors` changes program semantics such that it results 
in ODR violations: if a declaration has properties that is determined by a 
`__has_extension` guard then `-pedantic-errors` changes the declaration 
semantics and creates an ODR violation (and in the case of ptrauth an ABI 
break).

I would argue that the bigger issue is this behavior from `__has_extension`: it 
seems that it presumes that all use of extensions will produce a warning, which 
gets turned into an error, so therefore anything used inside a 
`__has_extension(...) == true` block would always fail - but people can (and 
do) disable warnings all the time, so that assumption is incorrect. In addition 
to globally disabling warnings there is also `__extension__` which suppresses 
the warning locally and so also permits the use of an extension under 
`-pedantic-errors`.

The follow on problem here is that `__has_extension`'s behavior matches that of 
gcc, so I'm not sure it would be safe to change it. 

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

Reply via email to