Thread overview
ASan: disabling instrumentation of specific function
Aug 03, 2017
Johan Engelen
Aug 09, 2017
Nicholas Wilson
Aug 09, 2017
Jacob Carlborg
August 03, 2017
Hi all,
  I just implemented blacklisting of functions for the sanitizers' instrumentation via a blacklist file (this is what Clang also provides): https://github.com/ldc-developers/ldc/pull/2261

But I think it is nice if we also provide a way to disable sanitizer instrumentation by adding a UDA to a function. For PGO, back then, I choose to enable/disable profiling instrumentation through a pragma. However, adding our own pragmas is quite invasive and touches frontend code, whereas adding a UDA is easy and nicely compartmentalized.

Any ideas for a name of the UDA? And where to put it, in ldc.attributes?
Clang has the no_sanitize_address attribute.

Thanks,
  Johan
August 09, 2017
On Thursday, 3 August 2017 at 20:47:48 UTC, Johan Engelen wrote:
> Hi all,
>   I just implemented blacklisting of functions for the sanitizers' instrumentation via a blacklist file (this is what Clang also provides): https://github.com/ldc-developers/ldc/pull/2261
>
> But I think it is nice if we also provide a way to disable sanitizer instrumentation by adding a UDA to a function. For PGO, back then, I choose to enable/disable profiling instrumentation through a pragma. However, adding our own pragmas is quite invasive and touches frontend code, whereas adding a UDA is easy and nicely compartmentalized.

Well, technically UDA's now touch fronted code, in the form of one entry in idgen.d.
I haven't implemented any pragmas, but I'm sure they will be more complex.

> Any ideas for a name of the UDA? And where to put it, in ldc.attributes?
> Clang has the no_sanitize_address attribute.

Will blacklisting other sanitisers happen at a future point? if so it may make sense to do

// Probably already exists, but w/e
// force the type
enum Sanitizer : byte
{
    Address,
    Thread,
    // Other sanitisers
}
struct blacklist // or struct noSanitize
{
    Sanitizer s;
}

otherwise just

private struct _noSanitizeAddress {};
enum noSanitizeAddress = _noSanitizeAddress();

> Thanks,
>   Johan

August 09, 2017
On 2017-08-09 03:56, Nicholas Wilson wrote:

> Well, technically UDA's now touch fronted code, in the form of one entry
> in idgen.d.

idgen is basically a cache, nothing is _required_ to be in the cache. It also helps avoid misspelling symbol names known by the compiler.

-- 
/Jacob Carlborg