LINUX.ORG.RU

Ассемблерные ошибки при компиляции С кода

 , ,


2

2

У меня такая ситуация:

Есть функция:

void $lambda_1(Registers* registers, FunEnv *env, Var c) {
    NEW_INT(registers, registers->result, GET_INT(env->outers[0]) + GET_INT(c));
}

void make_lambda(Registers* registers, Var a) {
    FunEnv* new_env;
    OO_Lambda_new((void*)&$lambda_1, registers, (int)1, &new_env);
    ...
}

Если закоментировать вызов OO_Lambda_new, то все ок. С самим вызовом, при сборке компилятор выдает.

/tmp/ccyO0QEF.s: Assembler messages:
/tmp/ccyO0QEF.s:305: Error: junk `(%rip)' after expression
/tmp/ccyO0QEF.s:305: Error: operand type mismatch for `lea'

Меня эта ошибка вводит в ступор, так как у меня в коде нигде нет ассемблерных вставок и ранее, на другой машине, в gcc все компилировалось ок. Я бы решил, что это баг в gcc, но clang тоже выдает такую ошибку. Это не единственное использование OO_Lambda_new в коде, и в других местах проблем с ней нет.

Чем пробовал собирать:
gcc (Ubuntu 7.3.0-27ubuntu1~18.04) 7.3.0
clang version 6.0.0-1ubuntu2 (tags/RELEASE_600/final)

У кого есть мысли? какую информацию нужно предоставить для анализа?

★★★★★
Ответ на: комментарий от tailgunner

Внезапно починилось. Всегда думал, что в си $ - обычный литерал. Да и почему раньше компилировалось?

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

Всегда думал, что в си $ - обычный литерал

ЕМНИП, $ - это как минимум нестандарт.

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

Стандарт разрешает реализации расширять список символов, которые используются в идентификаторах. И $ часто разрешён. Только здесь что-то пошло не так с gas (раз разрешили, то должно бы работать).

xaizek ★★★★★
()

$ - служебный символ. Лучше не использовать, но если точно знать как именно он используется внутри то иногда можно. Ты попал именно в ситуацию когда нельзя.

cvv ★★★★★
()

возможно, это баг. символ должен был экранироватсья при герерации ассемблера

mittorn ★★★★★
()

Отстреливание себе ног в промышленных масштабах, недорого!

anonymous
()

O шит, что за наркомания?

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