aaron.ballman added a comment. In D131351#3718728 <https://reviews.llvm.org/D131351#3718728>, @mizvekov wrote:
> In D131351#3718725 <https://reviews.llvm.org/D131351#3718725>, @aaron.ballman > wrote: > >> However, we don't care about the type mismatch when doing a redeclaration or >> when dropping the attribute, as in: >> >> __attribute__((noreturn)) void my_exit(void); >> void (*handler)(void) = my_exit; // Silently drops the attribute >> >> _Noreturn void my_exit(void) { // No concerns about the type mismatch on >> redeclaration because we inherit __attribute__((noreturn)) >> } >> >> so maybe we shouldn't worry about it here. > > Are you sure? If the function types don't match in C++, I would expect that > to become a different overload, not a redeclaration, right? The changes here only impact C so it shouldn't be a big deal, but we do not create an overload set for them in C with the `overloadable` attribute: https://godbolt.org/z/1ETe6ff5s I tracked down the `noreturn` behavior and this turns out to be intentional for the past ten years and is a result of a bug report I can't see: https://github.com/llvm/llvm-project/blob/main/clang/lib/Sema/SemaOverload.cpp#L1526 (https://github.com/llvm/llvm-project/commit/48c69106e4ce1 was what added the functionality.) Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D131351/new/ https://reviews.llvm.org/D131351 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits