[clang] [Clang] __has_builtin should return false for aux triple builtins (PR #121839)
Nick Sarnie via cfe-commits
cfe-commits at lists.llvm.org
Wed Jan 22 09:06:09 PST 2025
================
@@ -1818,8 +1819,21 @@ void Preprocessor::ExpandBuiltinMacro(Token &Tok) {
// usual allocation and deallocation functions. Required by libc++
return 201802;
default:
+ // We may get here because of aux builtins which may not be
+ // supported on the default target, for example if we have an X86
+ // specific builtin and the current target is SPIR-V. Sometimes we
+ // rely on __has_builtin returning true when passed a builtin that
+ // is not supported on the default target due to LangOpts but is
+ // supported on the aux target. See
+ // test/Headers/__cpuidex_conflict.c for an example. If the builtin
+ // is an aux builtin and it can never be supported on the default
+ // target, __has_builtin should return false.
+ if (getBuiltinInfo().isAuxBuiltinID(BuiltinID) &&
+ getBuiltinInfo().isAuxBuiltinIDAlwaysUnsupportedOnDefaultTarget(
----------------
sarnex wrote:
Sorry for the late response.
My interpretation of Aaron's comment seems like he expects the behavior we see today (aux triple builtins enabled on offloading targets), thus making the OpenMP offloading part of the `cpuid` LIT test correct.
@AaronBallman Do you mind clarifying what you think should happen here? Sorry, your comment was from a while back.
https://github.com/llvm/llvm-project/pull/121839
More information about the cfe-commits
mailing list