[Bug c/54954] malloc optimizations not disabled by -fno-builtin
rguenth at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Thu Nov 21 12:05:00 GMT 2013
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54954
Richard Biener <rguenth at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Resolution|INVALID |WORKSFORME
--- Comment #9 from Richard Biener <rguenth at gcc dot gnu.org> ---
I said it works for me because it works with -fno-builtin-malloc.
Andrew, you are wrong - the malloc attribute itself does not tell us
that the malloc call may not clobber global memory.
I've massaged the testcase to build w/o warnings:
m.c:
#include <string.h>
#include <stdio.h>
void *__libc_malloc(size_t size);
void *malloc(size_t size)
{
increment_count();
return (void*)__libc_malloc(size);
}
t.c:
#include <assert.h>
#include <stdlib.h>
#include <stdio.h>
static int count = 0;
void increment_count(void)
{
count++;
}
int main (void)
{
char *ptr;
count = 0;
ptr = malloc(1);
assert(ptr);
assert(count);
printf("%p\n", ptr);
free(ptr);
return 0;
}
rguenther@murzim:/tmp> /space/rguenther/install/gcc-4.7.0/bin/gcc -o t t.c m.c
-O2 -fno-builtin-malloc
rguenther@murzim:/tmp> ./t
0x1127010
rguenther@murzim:/tmp> /space/rguenther/install/gcc-4.7.0/bin/gcc -o t t.c m.c
-O2
rguenther@murzim:/tmp> ./t
t: t.c:18: main: Assertion `count' failed.
Aborted
Works with all GCC versions I tried. I tried on x86_64-linux (just in case
RTL optimizers break this in which case the target architecture may be
important).
More information about the Gcc-bugs
mailing list