LINUX.ORG.RU

gcc 3.3.3 ошибка при оптимизации -O2


0

0

Есть программа на C, SuSE PRO 9.1 (i386) и gcc 3.3.3 из дистрибутива, при компиляции с ключами -O0 и -O1 все компилируется и линкуется, но если использовать -O2, то во время линковки получаю сообщение /tmp/ccwiAq9H.o(.data+0x8): undefined reference to `__compound_literal.0'
В чем может быть дело?

Текст программы:

#include <stdio.h>

typedef struct StrDesc *Str;
typedef struct StrDesc {
Str *list;
} StrDesc;

static StrDesc str_a =
{
(Str[])
{
NULL
}
};

static StrDesc str_b =
{
(Str[])
{
&str_a
}
};

void dummy_mod(Str md)
{

};

void dummy() {
dummy_mod(&str_b);
}

int main()
{
return 0;
}

anonymous

объявлять переменные я бы стал так:

static StrDesc str_a = { 0 }; static StrDesc str_b = { &&str_a };

Кастинг к Str[] во первых лишний. А во вторых он наебнутый какой-то -- ты сперва зачем-то оборачиваешь в фигурные скобки -- compound literal.

dilmah ★★★★★
()
Ответ на: комментарий от dilmah

> объявлять переменные я бы стал так:
> static StrDesc str_a = { 0 }; static StrDesc str_b = { &&str_a };

Так вообще не компилируется, на программу

#include <stdio.h>

typedef struct StrDesc *Str;
typedef struct StrDesc {
Str *list;
} StrDesc;

static StrDesc str_a = { 0 };
static StrDesc str_b = { &&str_a };

int main()
{
return 0;
}

выдает Test.c:9: error: label str_a referenced outside of any function
может я что-то не так понял.

> А во вторых он наебнутый какой-то -- ты сперва зачем-то оборачиваешь в фигурные скобки -- compound literal.

этот код генерится автоматически одной программой, я из него все лишнее удалил для воспроизведения ошибки

anonymous
()
Ответ на: комментарий от anonymous

static StrDesc str_a = { 0 }; static StrDesc str_b = { &str_a.list };

dilmah ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.