Не работает оптимизация COMDAT в MS link
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 16.03.21 05:42
Оценка:
Определяю вот такой массив:

extern struct StringPtr {
  char * String;
}  const __declspec (selectany) Strings [] = {
  "xxxxxxxxxxxx",
};


Компилирую с ключом /Gy, в ассемблерном листинге вижу, что Strings объявлен в COMDAT.

Линкую хоть по умолчанию, хоть явно с ключом /opt:ref, в verbose-выдаче вижу:

Discarded "struct StringPtr const * const Strings" (?Strings@@3QBUStringPtr@@B) from main.obj


Смотрю EXE — там лежит строка "xxxxxxxxxxxx".

Наблюдается во всех cl/link с середины 2000-х, и до самых последних версий.

Это глюк компилятора/линкера, или я что-то делаю не так?
visual c++ link comdat оптимизация opt ref
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.