diff --git a/gcc/testsuite/g++.dg/DRs/dr2604.C b/gcc/testsuite/g++.dg/DRs/dr2604.C new file mode 100644 index 00000000000..64bdf5d11a8 --- /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); +}