I see with any recent GCC (when targeting the Itanium C++ ABI),

$ cat test.cc
#include <iostream>
#include <typeinfo>
void f() noexcept;
int main() { std::cout << typeid(f).name() << '\n'; }

$ g++ -std=c++17 test.cc
$ ./a.out
FvvE

that the function type's mangling doesn't contain the noexcept specifier (in which case it would be "DoFvvE").

Is that a deliberate decision in GCC, or does it just happen by accident (as for function pointer types, the Itanium ABI encodes noexcept specifiers at the __pointer_type_info, not at the underlying __function_type_info)?

I'm asking in the context of Clang patch <https://reviews.llvm.org/D40720> "No -fsanitize=function warning when calling noexcept function through non-noexcept pointer in C++17". Clang happens to produce type_info for the noexcept-annotated function type (with "DoFvvE" name) in the above example, and not doing so (and instead behaving like GCC does) would be one way to solve the issue I want to fix with that patch.

Reply via email to