3 ms·
> even without LTO, the compiler knows what malloc and free do at a semantic level. int *a = ...; int b = *a; malloc(42); b = *a; printf(b); If mall
by jlebar 6y ago
> even without LTO, the compiler knows what malloc and free do at a semantic level.
int *a = ...;
int b = *a;
malloc(42);
b = *a;
printf(b);
If malloc is an opaque function, can the compiler nonetheless eliminate the second `b = *a` load as dead because it "knows what malloc does"? Certainly not, right?
- jepler 6y agohttps://godbolt.org/z/z-92qR https://godbolt.org/z/z-92qR Interestingly, the compiler emits no call to malloc, even. What!?
- gpderetta 6y agoThe compiler knows the semantics of malloc. Malloc as it appear in the source code doesn't even need to map 1:1 to calls to the library function, the compiler can remove and coalesce calls at will.
- steerablesafe 6y agoWith -fno-builtin. It's still "cheating" as b is local. https://godbolt.org/z/U5VGxt https://godbolt.org/z/U5VGxt Without cheating: https://godbolt.org/z/rzcXg2 https://godbolt.org/z/rzcXg2 It doesn't optimize the two stores to b away.