From: Jakub Jelinek Date: Tue, 15 Nov 2022 06:57:42 +0000 (+0100) Subject: c++: Add testcase for DR 2604 X-Git-Tag: basepoints/gcc-14~3162 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e0f4fcf9dfb8794a11d4ee63899b820aa9257f50;p=thirdparty%2Fgcc.git c++: Add testcase for DR 2604 As the following testcase shows, I think we don't inherit template's attributes into specializations. 2022-11-15 Jakub Jelinek * g++.dg/DRs/dr2604.C: New test. --- diff --git a/gcc/testsuite/g++.dg/DRs/dr2604.C b/gcc/testsuite/g++.dg/DRs/dr2604.C new file mode 100644 index 000000000000..64bdf5d11a86 --- /dev/null +++ b/gcc/testsuite/g++.dg/DRs/dr2604.C @@ -0,0 +1,53 @@ +// DR 2604 - Attributes for an explicit specialization. +// { dg-do compile { target c++11 } } +// { dg-options "-Wunused-parameter" } + +template +[[noreturn]] void +foo ([[maybe_unused]] int i) +{ + for (;;); +} + +template<> +void +foo (int i) // { dg-warning "unused parameter 'i'" } +{ +} + +template +void +bar (int i) // { dg-warning "unused parameter 'i'" } +{ +} + +template<> +[[noreturn]] void +bar ([[maybe_unused]] int i) +{ + for (;;); +} + +[[noreturn]] void +baz () +{ + foo (0); +} + +[[noreturn]] void +qux () +{ + foo (0); +} // { dg-warning "'noreturn' function does return" } + +[[noreturn]] void +garply () +{ + bar (0); +} // { dg-warning "'noreturn' function does return" } + +[[noreturn]] void +corge () +{ + bar (0); +}