[Bug c/67651] New: Optimizer assumes nothing can reside at address 0 despite -fno-delete-null-pointer-checks

2015-09-20 Thread soren.brinkmann at xilinx dot com
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67651

Bug ID: 67651
   Summary: Optimizer assumes nothing can reside at address 0
despite -fno-delete-null-pointer-checks
   Product: gcc
   Version: 4.9.2
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: c
  Assignee: unassigned at gcc dot gnu.org
  Reporter: soren.brinkmann at xilinx dot com
  Target Milestone: ---

Created attachment 36351
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=36351&action=edit
Test case source

For the c source:
extern unsigned int _vector_table;

int main(void)
{
unsigned int *vector_base = &_vector_table;

if (vector_base == 0) {
return 1;
} else {
return 2;
}
}


the generated code is, when compiled with '-O2
-fno-delete-null-pointer-checks':
 :
   0:   b8 02 00 00 00  mov$0x2,%eax
   5:   c3  retq


I.e. the if branch is completely removed from the final object.
The behavior is consistent across the gcc versions I could test (4.7, 4.9 for
ARMv7 and 4.9, 5.2 for x86_64)

The behavior has been discussed on the list
(http://thread.gmane.org/gmane.comp.gcc.devel/141346). One workaround/fix
mentioned there is to add the 'weak' attribute to '_vector_table'. But it seems
that '-fno-delete-null-pointer-checks' is supposed to remove the assumption
regarding objects at address 0 and should be sufficient to generate "correct"
code.

For completeness, this is a Makefile to compile the test case:
CC ?= gcc
OBJDUMP = objdump
CFLAGS = -Wall -Wextra -fno-delete-null-pointer-checks -O2
-fno-delete-null-pointer-checks

SRC = main.c

all: $(SRC:.c=.dump) $(SRC:.c=.s) $(SRC:.c=.o)

%.dump: %.o
$(OBJDUMP) -DS $< > $@

%.s: %.c
$(CC) $(CFLAGS) -S $< -o $@

%.o: %.c
$(CC) $(CFLAGS) -c $< -o $@

.PHONY: clean
clean:
rm -rf *.o *.s *.dump


[Bug c/67651] Optimizer assumes nothing can reside at address 0 despite -fno-delete-null-pointer-checks

2015-09-20 Thread soren.brinkmann at xilinx dot com
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67651

--- Comment #1 from Sören Brinkmann  ---
Created attachment 36352
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=36352&action=edit
Makefile for the test case