From e0f4fcf9dfb8794a11d4ee63899b820aa9257f50 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Tue, 15 Nov 2022 07:57:42 +0100 Subject: [PATCH] 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. --- gcc/testsuite/g++.dg/DRs/dr2604.C | 53 +++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 gcc/testsuite/g++.dg/DRs/dr2604.C 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); +} -- 2.47.2