Предупреждение xlC. Параметр NOSTRICT может изменить семантику программы.

Я тестирую на GCC Compile Farm и GCC119. GCC119 — это машина AIX с компилятором xlC 13.1. Я очень мало знаю о платформе и компиляторе.

Когда я строю под xlC:

$ CXX=xlC gmake CXXFLAGS="-DNDEBUG -g2 -O3 -qrtti" -j 8
xlC -DNDEBUG -g2 -O3 -qrtti -c cryptlib.cpp
xlC -DNDEBUG -g2 -O3 -qrtti -c cpu.cpp
...
xlC -DNDEBUG -g2 -O3 -qrtti -c hmac.cpp
1500-036: (I) The NOSTRICT option (default at OPT(3)) has the potential to alter the 
semantics of a program.  Please refer to documentation on the STRICT/NOSTRICT option
for more information.
...

Руководство IBM для компилятора находится по адресу Compiler Reference v13.1. . Он не упоминает STRICT или NOSTRICT. Самое близкое, что приходит на основе поиска по ключевым словам, — это обсуждение __C99_RESTRICT, когда действует -qkeyword=restrict. Кроме того, отсутствуют справочные страницы:

$ man NOSTRICT
Manual entry for NOSTRICT not found or not installed.
$ man 3 NOSTRICT
There is not an entry for NOSTRICT in section 3.
$ man STRICT
Manual entry for STRICT not found or not installed.
$ man 3 STRICT
There is not an entry for STRICT in section 3.
$ man OPT
Manual entry for OPT not found or not installed.
$ man 3 OPT
There is not an entry for OPT in section 3.

Когда я компилирую с помощью -qflag=w, предупреждения исчезают, поэтому у меня остается еще меньше информации для работы. (Библиотека и программа полностью компилируются с помощью -qflag=w).

У меня есть два вопроса. Во-первых, на что именно жалуется xlC? Во-вторых, есть ли возможность, чтобы xlC сообщал мне исходный файл и номер строки, на которые он жалуется?


person jww    schedule 01.09.2017    source источник
comment
Вариант -O3 подразумевает вариант NOSTRICT. Подробнее читайте в xlC документации. Я предполагаю, что вы беспокоитесь не о проблеме.   -  person Lorinczy Zsigmond    schedule 01.09.2017
comment
Спасибо Лоринци. Пожалуйста, простите мое невежество. Я скачал руководство по компилятору, но, похоже, оно не адресовано. О какой документации вы говорите?   -  person jww    schedule 01.09.2017
comment
У меня нет такого xlC, так что тут ничем помочь не могу. Тем не менее Google нашел это: www-01.ibm.com/support /docview.wss?uid=swg27024742&aid=1 — похоже, подробно объясняются варианты оптимизации.   -  person Lorinczy Zsigmond    schedule 01.09.2017


Ответы (1)


Если вы ищете информацию об опциях -qstrict и -qnostrict, вы можете найти ее здесь, в формат HTML или на странице 349 (если вы используете номера страниц), или на странице 367 (если вы используете страницу PDF advancer) в формате PDF.

Поскольку вы используете -O3 (OPT(3)), как говорится в сообщении, по умолчанию действует параметр -qnostrict, что означает, что по сравнению с компиляцией с параметром -qstrict выполняются более агрессивные оптимизации для создания более быстрого исполняемый за счет небольших семантических различий в вашей программе. Посмотрите документацию (скопированную ниже), чтобы узнать, что конкретно это означает; если какие-либо из упомянутых ниже различий важны для вас, скомпилируйте с параметром -O3 -qstrict, чтобы предотвратить появление этих семантических различий, но производительность вашего приложения может быть ниже.

При действии -qnostrict включаются следующие оптимизации:

  • Код, который может вызвать исключение, может быть изменен. Соответствующее исключение может произойти в другой момент выполнения или вообще не возникнуть. (Компилятор по-прежнему пытается свести к минимуму такие ситуации.)
  • Операции с плавающей запятой могут не сохранять знак нулевого значения. (Чтобы убедиться, что этот знак сохранен, вам также необходимо указать -qfloat=rrm, -qfloat=nomaf или -qfloat=strictnmaf.)
  • Выражения с плавающей запятой могут быть повторно ассоциированы. Например, (2,0*3,1)4,2 может стать 2,0(3,1*4,2), если это быстрее, даже если результат может не совпадать.
  • Включены подопции flint и rsqrt опции -qfloat. Вы можете снова отключить их, также используя параметр -qstrict или подпараметры nofltint и norsqrt параметра -qfloat. Если оптимизация более низкого уровня или не указана, эти подпараметры по умолчанию отключены.

Ваши команды man не будут работать так, как написано, поскольку NOSTRICT, STRICT и OPT являются параметрами компилятора и не могут использоваться с man. Чтобы просмотреть справочные страницы компилятора, вам нужно использовать man xlC.

С этим информационным сообщением не связана информация об исходном файле и номере строки, потому что это общее сообщение для всех файлов, скомпилированных с помощью -O3.

Если вы хотите оставить отзыв о документации (включая справочные страницы, онлайн-документы и т. д.), IBM ждет отзывов.

P.S. Полную документацию по IBM XL C/C++ для AIX версии 13.1 можно найти по адресу формат HTML или в формате PDF. Существует несколько «книг», составляющих полную документацию по компилятору, включая справочник по компилятору.

person Nicole Trudeau    schedule 01.09.2017
comment
Спасибо @trudeun. Это предупреждение почти бесполезно. В руководстве, которое я скачал, была информация. Однако диагностика компилятора меня к этому не привела. Извините, что потратил на это ваше время. И это -qstrict жестоко. Похоже, он возится с кодом, который зависит от неподписанного переноса (а не от подписанного переполнения). - person jww; 01.09.2017