Umesh Kalappa via llvm-dev
2020-Jan-20 10:57 UTC
[llvm-dev] Over-ride the compiler built-in functions .
Hi All, We are trying to override the compiler atomic builtin functions like int __sync_val_compare_and_swap( int *p,int x ,int y) { return *p; //ignore the function semantics here } int main() { int x = 0, y = 1; y = __sync_val_compare_and_swap(&x, x, y); return x + y; } clang throws the error like test.c:1:6: error: cannot redeclare builtin function '__sync_val_compare_and_swap' int __sync_val_compare_and_swap( int *p,int x ,int y) ^ test.c:1:6: note: '__sync_val_compare_and_swap' is a builtin with type 'void ()' test.c:1:6: error: definition of builtin function '__sync_val_compare_and_swap' int __sync_val_compare_and_swap( int *p,int x ,int y) But GCC compiles it and we think that GCC is right here unlike clang. We would like to hear from the community view on this. Thank you ~Umesh -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20200120/bc5eb5a9/attachment.html>
Tim Northover via llvm-dev
2020-Jan-20 15:22 UTC
[llvm-dev] [cfe-dev] Over-ride the compiler built-in functions .
On Mon, 20 Jan 2020 at 10:57, Umesh Kalappa via cfe-dev <cfe-dev at lists.llvm.org> wrote:> But GCC compiles it and we think that GCC is right here unlike clang.Names starting with two underscores (or a single underscore and a capital letter) are reserved by the C and C++ standards for the compiler to use. Defining any function like that is technically undefined behaviour; defining one the compiler actually does use like these atomic ones is extremely risky and Clang has decided it's better to diagnose these issues than proceed with unknown behaviour. Without the diagnostic, I believe your implementations would never be called the way Clang is currently implemented.> We would like to hear from the community view on this.I think Clang is certainly technically in the right, and I'm not convinced the ability to override them is a feature worth implementing. Cheers. Tim.