LINUX.ORG.RU

История изменений

Исправление pavlick, (текущая версия) :

Ну так он заоптимизурует, если там действительно данные по ptr есть (либо сам подставит).

Я ошибался в том, что зависимость от рантайм условий отключит оптимизацию. ГЦЦ норм, а шланг творит лютую дичь (не -O0):

#include <stdio.h>

const char *f() {
    char i = getchar();
	if (i == '1')
		return NULL;
	return "qjfkdjf";
}

int main(void) {
    printf("formatting drive %c\n", *f());
}

Ему вообще пофиг, что возврат из f() зависит от рантайм условий и всегда возвращает «qjfkdjf». Если не могут написать даже unspecified, то нужно хотя бы обязать делать реальное чтение из памяти, а не оставлять полностью на откуп оптимизатору. В общем да - лучше бы с этим что-то сделать. Вдруг какой-то редкий кейс и в -O0 дело до него не дошло, так пусть релизе лучше вообще все упадет чем вот так как в шланге.

Исходная версия pavlick, :

Ну так он заоптимизурует, если там действительно данные по ptr есть (либо сам подставит).

Я ошибался в том, что зависимость от рантайм условий отключит оптимизацию. ГЦЦ норм, а шланг творит лютую дичь (не -O0):

#include <stdio.h>

const char *f() {
    char i = getchar();
	if (i == 1)
		return NULL;
	return "qjfkdjf";
}

int main(void) {
    printf("formatting drive %c\n", *f());
}

Ему вообще пофиг, что возврат из f() зависит от рантайм условий и всегда возвращает «qjfkdjf». Если не могут написать даже unspecified, то нужно хотя бы обязать делать реальное чтение из памяти, а не оставлять полностью на откуп оптимизатору. В общем да - лучше бы с этим что-то сделать. Вдруг какой-то редкий кейс и в -O0 дело до него не дошло, так пусть релизе лучше вообще все упадет чем вот так как в шланге.