История изменений
Исправление alysnix, (текущая версия) :
если вставить вот это в compiler explorer
extern void func1( void* fp); ///типа внешняя функция, чтобы не заоптимизировалось в нуль.
void test__test() {
auto lp = malloc(1000);
auto lpp = malloc(1000);
func1(lp);
if (lp == lpp) func1(lpp);
}
то clang при -02 выкидывает второй вызов func1, считая что указатели не могут быть одинаковыми. но поскольку по стандарту malloc может вернуть и NULL, то такое утверждение слишком сильно.
test__test(): # @test__test()
push rax
mov edi, 1000
call malloc@PLT
mov rdi, rax
pop rax
jmp func1(void*)@PLT
Исходная версия alysnix, :
если вставить вот это в compiler explorer
extern void func1( void* fp); ///типа внешняя функция, чтобы на заоптимизировалось в нуль.
void test__test() {
auto lp = malloc(1000);
auto lpp = malloc(1000);
func1(lp);
if (lp == lpp) func1(lpp);
}
то clang при -02 выкидывает второй вызов func1, считая что указатели не могут быть одинаковыми. но поскольку по стандарту malloc может вернуть и NULL, то такое утверждение слишком сильно.
test__test(): # @test__test()
push rax
mov edi, 1000
call malloc@PLT
mov rdi, rax
pop rax
jmp func1(void*)@PLT