[LLVMdev] should asan catch tihs?

Richard Smith richard at metafoo.co.uk
Tue Nov 6 09:53:27 PST 2012


On Fri, Nov 2, 2012 at 6:27 PM, Rafael EspĂ­ndola
<rafael.espindola at gmail.com> wrote:
> I just tried asan on an optimized  32 bit build of
> -------------------------------------
> #include <stdint.h>
> __attribute__((noinline))
>  void f(uint64_t *p) {
>   *p = 42;
> }
> int main() {
>   void *p;
>   f((uint64_t*)&p);
> }
> ------------------------------------
>
> and it correctly catches the invalid access. If I comment the
> attribute, the optimizers find and exploit the undefined behavior and
> asan fails to report it. Is this the expected behavior? Is this
> something that needs -fcatch-undefined-behavior instead?

-fcatch-undefined-behavior (more specifically, -fsanitize=object-size)
already catches this if the function gets inlined:

$ clang -x c++ <(grep -v attribute testcase.cpp) -fsanitize=object-size -m32 -O3
$ ./a.out
<stdin>:4:3: fatal error: store to address 0xff97f8c8 with
insufficient space for an object of type 'uint64_t' (aka 'unsigned
long long')




More information about the llvm-dev mailing list