From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 2153) id B130C382EF0A; Tue, 15 Nov 2022 07:18:25 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org B130C382EF0A DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1668496705; bh=tMGLd+yuuU2jViYbAHDzi6uZ7/rUJkRdQMGeXl84nNw=; h=From:To:Subject:Date:From; b=YBY+pT1AbaNdZEOkvB7g2HAHASmQvWL8lTHCjJhI70RoyiVEd8LvEnfR9siL/MvwP N3BJVpl/8GbYFsOycvLACZ0WSq4pIa2K1W+RsAouhl97WomyOBL4WRc12N917YzXMA cNQ3qhENjx6Rg2A5uqeYEKQegJsczOxvbgatpLuE= MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="utf-8" From: Jakub Jelinek To: gcc-cvs@gcc.gnu.org Subject: [gcc r13-4045] c++: Add testcase for DR 2604 X-Act-Checkin: gcc X-Git-Author: Jakub Jelinek X-Git-Refname: refs/heads/master X-Git-Oldrev: dc95e1e9702f2f6367bbc108c8d01169be1b66d2 X-Git-Newrev: e0f4fcf9dfb8794a11d4ee63899b820aa9257f50 Message-Id: <20221115071825.B130C382EF0A@sourceware.org> Date: Tue, 15 Nov 2022 07:18:25 +0000 (GMT) List-Id: https://gcc.gnu.org/g:e0f4fcf9dfb8794a11d4ee63899b820aa9257f50 commit r13-4045-ge0f4fcf9dfb8794a11d4ee63899b820aa9257f50 Author: Jakub Jelinek Date: Tue Nov 15 07:57:42 2022 +0100 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: --- gcc/testsuite/g++.dg/DRs/dr2604.C | 53 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) 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); +}