vak: (Default)
[personal profile] vak
Обнаружил код, на котором крэшится компилятор clang.
struct {
unsigned : 2;
unsigned a : 6;
unsigned : 1;
unsigned b : 6;
unsigned : 2;
unsigned c : 6;
unsigned d : 1;
unsigned e : 2;
} data = {
.e = 1,
.c = 1,
.a = 1,
};
Устойчиво валится с вот такой диагностикой:
$ clang -c code.cpp 
clang: error: unable to execute command: Segmentation fault: 11
clang: error: clang frontend command failed due to signal (use -v to see invocation)
Apple clang version 14.0.3 (clang-1403.0.22.14.1)
Target: arm64-apple-darwin22.4.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
clang: note: diagnostic msg:
********************

PLEASE ATTACH THE FOLLOWING FILES TO THE BUG REPORT:
Preprocessed source(s) and associated run script(s) are located at:
clang: note: diagnostic msg: /var/folders/8l/gxp7qhcn32xgfkdm22_gjnkh0000gn/T/code-224576.cpp
clang: note: diagnostic msg: /var/folders/8l/gxp7qhcn32xgfkdm22_gjnkh0000gn/T/code-224576.sh
clang: note: diagnostic msg: Crash backtrace is located in
clang: note: diagnostic msg: /Users/vak/Library/Logs/DiagnosticReports/clang_<yyyy-mm-dd-hhmmss>_<hostname>.crash
clang: note: diagnostic msg: (choose the .crash file that corresponds to your crash)
clang: note: diagnostic msg:

********************
Версия clang-9 работает. Версии clang-12, clang-14 и clang-16 падают. Отправил bug report в Эппл, посмотрим, как среагируют.

Date: 2023-05-18 00:32 (UTC)
archaicos: Шарж (Default)
From: [personal profile] archaicos
«Ага!» сказали суровые мужики.

Date: 2023-05-18 01:23 (UTC)
archaicos: Шарж (Default)
From: [personal profile] archaicos
Порядок инициализации важен?

Date: 2023-05-18 04:13 (UTC)
spamsink: (Default)
From: [personal profile] spamsink
Пользовался бы ты godbolt.org (или просто -Wall), то увидел бы, что компилятор успевает выдать
<source>:12:5: warning: ISO C++ requires field designators to be specified in declaration order; field 'e' will be initialized after field 'c' [-Wreorder-init-list]
    .c = 1,
    ^~~~~~
<source>:13:5: warning: ISO C++ requires field designators to be specified in declaration order; field 'c' will be initialized after field 'a' [-Wreorder-init-list]
    .a = 1,
    ^~~~~~


Короче говоря, "вы его неправильно держите".

Date: 2023-05-18 02:08 (UTC)
sobriquet9: (Default)
From: [personal profile] sobriquet9
Apple не виноват, на линуксе тоже падает.

Date: 2023-05-18 03:16 (UTC)
ircicq: (Default)
From: [personal profile] ircicq
Валится только в режиме C++

clang -c code.c
работает

Date: 2023-05-18 03:40 (UTC)
From: [personal profile] dijifi
А с какого стандарта в C++ появились named initializers? В C++17 вроде не было.

Date: 2023-05-18 03:56 (UTC)
spamsink: (Default)
From: [personal profile] spamsink
Да уж, такое ни одним фаззингом не поймаешь. Интересно, что они там пытались оптимизировать, когда сломали.

Date: 2023-05-18 10:20 (UTC)
vit_r: default (Default)
From: [personal profile] vit_r
Видимо, пытаются отловить переполнение разрядов с затиранием последующих значений теми, которые выставляются для предыдущих.

Date: 2023-05-18 05:57 (UTC)
juan_gandhi: (Default)
From: [personal profile] juan_gandhi

Да уж. 21-й век.

Date: 2023-05-18 07:51 (UTC)
From: [personal profile] chabapok
впечатлен