История изменений
Исправление
kvpfs,
(текущая версия)
:
По поводу вечного цикла:
$ cat 1.cpp
#include <iostream>
[[ noreturn ]] void fn() {
#ifdef WITH_LOOP
while (true);
#endif
}
int main() {
fn();
}
void unreachable() {
std::cout << "hello world" << std::endl;
}
$ clang++ -std=c++20 1.cpp -O2 -Wall
1.cpp:7:1: warning: function declared 'noreturn' should not return [-Winvalid-noreturn]
}
^
1 warning generated.
$ clang++ -std=c++20 1.cpp -O2 -Wall -DWITH_LOOP
$ ./a.out
hello world
В общем не надо рассказывать, что это норм, ну ЮБ (а стандарт то кто-нибудь видел на этот счет? может там и нет никакого ЮБ), чего ты хотел. Шланг противоречит сам себе - с noreturn атрибутом данный цикл его устраивает в качестве вечного и возврат из него не ожидается. Шланг сломан, на выходе такой бред:
fn(): # @fn()
main: # @main
unreachable(): # @unreachable()
pushq %rbx
... #печать hello world
Исходная версия
kvpfs,
:
По поводу вечного цикла:
$ cat 1.cpp
#include <iostream>
[[ noreturn ]] void fn() {
#ifdef WITH_LOOP
while (true);
#endif
}
int main() {
fn();
}
void unreachable() {
std::cout << "hello world" << std::endl;
}
$ clang++ -std=c++20 1.cpp -O2 -Wall
1.cpp:7:1: warning: function declared 'noreturn' should not return [-Winvalid-noreturn]
}
^
1 warning generated.
$ clang++ -std=c++20 1.cpp -O2 -Wall -DWITH_LOOP
$ ./a.out
hello world
В общем не надо рассказывать, что это норм, ну ЮБ (а стандарт то кто-нибудь видел на этот счет? может там и нет никакого ЮБ), чего ты хотел. Шланг противоречит сам себе - с noreturn атрибутом данный цикл его устраивает в качестве вечного и возврат из него не ожидается. Шланг сломан.