https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101432

            Bug ID: 101432
           Summary: NULL dereferences aren't assumed to be unreachable
                    even with -fdelete-null-pointer-checks
                    -fno-isolate-erroneous-paths-dereference
           Product: gcc
           Version: 11.1.0
            Status: UNCONFIRMED
          Keywords: missed-optimization
          Severity: normal
          Priority: P3
         Component: c
          Assignee: unassigned at gcc dot gnu.org
          Reporter: josephcsible at gmail dot com
  Target Milestone: ---
            Target: x86_64-linux-gnu

Consider this C code:

#include <stddef.h>
int f(_Bool x) {
    if(x) {
        int *null = NULL;
        return *null;
    } else {
        return 42;
    }
}

I want this assembly:

f:
        movl    $42, %eax
        ret

But even with -O3 -fdelete-null-pointer-checks
-fno-isolate-erroneous-paths-dereference, I get this assembly:

f:
        movl    $42, %eax
        testb   %dil, %dil
        je      .L1
        movl    0, %eax
.L1:
        ret
  • [Bug c/101432] New: NULL derefe... josephcsible at gmail dot com via Gcc-bugs

Reply via email to