[llvm-dev] diagnose_if attribute not working as described (original) (raw)

Roger Pau Monné via llvm-dev llvm-dev at lists.llvm.org
Thu May 28 08:09:50 PDT 2020


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 }

:8:12: error: Nonstandard ABI FOOBAR(foo); ^ :3:6: note: from 'diagnose_if' attribute on 'foo': void nocall foo(void); ^~~~~~ :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.



More information about the llvm-dev mailing list