https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71538
Bug ID: 71538 Summary: Obvious optimization related to arrays aren't performed. Product: gcc Version: 6.1.1 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c Assignee: unassigned at gcc dot gnu.org Reporter: sasho648 at gmail dot com Target Milestone: --- Consider this code: #include <stdio.h> extern void f(int *p) { p = *((int (*)[6])p); if(p == NULL) printf("NULL"); } It's obvious (at least for me) that p can't be possibly NULL because it's assigned the value of pointer to the first element of array with 6 elements. However the assembly output of this code for my native machine compiled on linux (x86-64 - dumped using ida pro with general assembler for intel) is: ;f function test rdi, rdi jz short loc_400550 rep retn ; --------------------------------------------------------------------------- align 10h loc_400550: mov edi, (offset format+4) ; "NULL" xor eax, eax jmp _printf ;f function end As you see the branch where printf is called with "NULL" is still present in the code although on theory it should never be reached. I don't think there is requirement by the standard to disallow evaluation of this expression (as opposed to for example *&p).