https://github.com/AaronBallman requested changes to this pull request.

Marking as requesting changes so we don't accidentally land, because I've got 
questions about whether we want to go down this route.

1) GCC has `__has_builtin`, so how do they handle offloading targets? Do they 
have the same odd behavior where `__has_builtin` returns true for builtins it 
cannot actually emit code for?
2) Given that `__has_target_builtin` seems to have the semantics everyone would 
expect from `__has_builtin`, do we want to consider deprecating `__has_builtin` 
so that downstreams have time to adjust but we eventually end up with a less 
confusing builtin?

It really seems to me that `__has_builtin` has a broken design because of 
compilations where we try to hide a two-pass compilation as though it were 
one-pass and it seems like we're going to confuse folks with that behavior. If 
I could wave a magic wand, I would say `__has_builtin` should behave exactly 
how `__has_target_builtin` is behaving in this PR and that a reliance on 
`__has_builtin` behaving how it does today is relying on a bug.

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

Reply via email to