Roger Pau Monné via llvm-dev
2020-May-28 15:09 UTC
[llvm-dev] diagnose_if attribute not working as described
Hello, I'm trying to use the diagnose_if to prevent function calls to certain symbols. The documentation for diagnose_if states: "The diagnose_if attribute can be placed on function declarations to emit warnings or errors at compile-time if calls to the attributed function meet certain user-defined criteria." Yet the following example fails to compile: #define nocall __attribute__((diagnose_if(1, "Nonstandard ABI", "error"))) void nocall foo(void); void bar(void) { #define FOOBAR(f) ({ void *t = f; }) FOOBAR(foo); #undef FOOBAR } <source>:8:12: error: Nonstandard ABI FOOBAR(foo); ^ <source>:3:6: note: from 'diagnose_if' attribute on 'foo': void nocall foo(void); ^~~~~~ <source>:1:31: note: expanded from macro 'nocall' #define nocall __attribute__((diagnose_if(1, "Nonstandard ABI", "error"))) ^ ~ 1 error generated. Yet the example doesn't make any call to foo, and hence the documentation should be fixed to state that any usage of the function will trigger the diagnose? Or is there some way to force diagnose_if to apply strictly to function calls only? Thanks, Roger.