Нет символа для раздела COMDAT - PullRequest
1 голос
/ 12 июня 2019

Я уже некоторое время работаю над своим языком, и я выполняю неявные и явные приведения.Вернулся, чтобы проверить, что происходит при вызове их.Все прошло хорошо, пока я не попытался вызвать бросок из дубля.Передача double функциям по какой-то причине приводит к тому, что clang выдает ошибку при связывании файла obj с файлом cpp, который его вызывает, а именно: «clang.exe: ошибка: команда компоновщика завершилась неудачно с кодом выхода 1143 (используйте -v для просмотра вызова)) program.obj: фатальная ошибка LNK1143: неверный или поврежденный файл: нет символа для секции COMDAT 0x5 "

Я тогда заметил, что это также происходит с плавающей точкой, но не происходит с целыми числами и подобными значениями.Я написал короткую функцию (принимает double по значению и возвращает его), чтобы проверить, была ли проблема связана с параметрами типов float / double.Ошибка возникает только при вызове функции, при определении функции, но не при ее вызове все работает правильно.Я также попытался просто сохранить двойной литерал в памяти (alloca), и это тоже сработало, поэтому проблема заключается в фактической передаче аргумента функции.

enter image description here

Простой IR LLVM для функции, которая принимает значение double по значению и возвращает его, затем вызывается из main (main is names _mainCRTStartup, чтобы не путать его с символом главной функции из файла cppзатем он вызывает его (extern "C"))

Спасибо за любую помощь заранее!: D

...