From patchwork Fri Jun 9 15:41:03 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jason Merrill X-Patchwork-Id: 70830 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id AFAD8385588A for ; Fri, 9 Jun 2023 15:41:37 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org AFAD8385588A DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1686325297; bh=+iWXt5YUD8dXEXk2G2tHBhWEocNq6JmSNM6cqzc59Ak=; h=To:Subject:Date:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=I5w584+hmN0PjI5EGh8sRdY67z3jZuCnsxuT5R/XGJx6EBXKsCwxpA2QqVEbSpzj1 bFTgA3ELEiwTqwbyCU7UEMUjlVCqF+chCcHc46dw87KQHGgS2ky1PXniLhC++bAfqd /j5WCAeZKZWTfh4XSju+pdLzGJHh1460hdwOnKeA= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by sourceware.org (Postfix) with ESMTPS id 837E23858D3C for ; Fri, 9 Jun 2023 15:41:09 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 837E23858D3C Received: from mail-vs1-f70.google.com (mail-vs1-f70.google.com [209.85.217.70]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-175-ZZz_MdiTM7q98RUkEc1TIw-1; Fri, 09 Jun 2023 11:41:07 -0400 X-MC-Unique: ZZz_MdiTM7q98RUkEc1TIw-1 Received: by mail-vs1-f70.google.com with SMTP id ada2fe7eead31-43c896d6f74so633012137.3 for ; Fri, 09 Jun 2023 08:41:07 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1686325267; x=1688917267; h=content-transfer-encoding:mime-version:message-id:date:subject:to :from:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=+iWXt5YUD8dXEXk2G2tHBhWEocNq6JmSNM6cqzc59Ak=; b=Bpt3c0Tdd2nVSOR+mNyej2YPQIYvCBd6Cc7Vfq/8Q6TctdlaFLLrJPZoUOJlZk8Z6P +e468KUuGmpEPxnA6UWr8nPe1Nx7RgtEFZ/yp95NL0BK6F62B9Hg0J8mJWXgnZVKCeDu GW+yl3N3r4AEzEA5D46EBR3KETPKvTr6agffz9HIQ0OUOU/ogPJJuyByY67iSIM2mDVs ZEJDab3Eu28yw83WPhtHNxkLy5df0qrpjArgpVM29ToUUCGZzrUC4QzKbydScYBS7PkF M0JI2fclXnZwGbdPzwwmdO7byAeeqh2Cs/Cj6dT3j4YPJpYDhI/M+OqLMijecL6kQScU 1KuA== X-Gm-Message-State: AC+VfDyITMPGaaWtIXrzm6gm6NzCGBw71hkEpTBkrFfBDDI2O+0WZ8CN LhQ4nC3GOgR5D5v4ZaqEcDcWBmHi4qMXvK4uIk1j0Zho02qQNIDuFsOiDi9DtMUh5urTnEFMD+P Q4+ScIHPotbmZgoLi7/jcHaRdNT4nUYB9WpucaF72aXkjYVKB5qg/yhAGTkt/WvNrTc9lieHoAw == X-Received: by 2002:a67:fd18:0:b0:439:751d:5a3c with SMTP id f24-20020a67fd18000000b00439751d5a3cmr1258440vsr.4.1686325266874; Fri, 09 Jun 2023 08:41:06 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ6H+SZUWV3oXc9vAjJ0sAYWXPq5cKK4YW+lMHGcr8MpB1W+nNTK0pWK9mb9jPQFSw4lu+qA2Q== X-Received: by 2002:a67:fd18:0:b0:439:751d:5a3c with SMTP id f24-20020a67fd18000000b00439751d5a3cmr1258431vsr.4.1686325266414; Fri, 09 Jun 2023 08:41:06 -0700 (PDT) Received: from jason.com (130-44-146-16.s12558.c3-0.arl-cbr1.sbo-arl.ma.cable.rcncustomer.com. [130.44.146.16]) by smtp.gmail.com with ESMTPSA id oj2-20020a056214440200b005ef442226bbsm1227041qvb.8.2023.06.09.08.41.05 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 09 Jun 2023 08:41:05 -0700 (PDT) To: gcc-patches@gcc.gnu.org Subject: [pushed] c++: diagnose auto in template arg Date: Fri, 9 Jun 2023 11:41:03 -0400 Message-Id: <20230609154103.3386960-1-jason@redhat.com> X-Mailer: git-send-email 2.31.1 MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com X-Spam-Status: No, score=-12.8 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_NONE, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Jason Merrill via Gcc-patches From: Jason Merrill Reply-To: Jason Merrill Errors-To: gcc-patches-bounces+patchwork=sourceware.org@gcc.gnu.org Sender: "Gcc-patches" Tested x86_64-pc-linux-gnu, applying to trunk. -- 8< -- We were failing to diagnose this Concepts TS feature that didn't make it into C++20 because the 'auto' was getting converted to a template parameter before we checked for it. So also check in cp_parser_simple_type_specifier. The code in cp_parser_template_type_arg that I initially expected to diagnose this seems unreachable because cp_parser_type_id_1 already checks auto. gcc/cp/ChangeLog: * parser.cc (cp_parser_simple_type_specifier): Check for auto in template argument. (cp_parser_template_type_arg): Remove auto checking. gcc/testsuite/ChangeLog: * g++.dg/concepts/auto7.C: New test. * g++.dg/concepts/auto7a.C: New test. --- gcc/cp/parser.cc | 17 ++++++++--------- gcc/testsuite/g++.dg/concepts/auto7.C | 9 +++++++++ gcc/testsuite/g++.dg/concepts/auto7a.C | 8 ++++++++ 3 files changed, 25 insertions(+), 9 deletions(-) create mode 100644 gcc/testsuite/g++.dg/concepts/auto7.C create mode 100644 gcc/testsuite/g++.dg/concepts/auto7a.C base-commit: 3e12669a0eb968cfcbe9242b382fd8020935edf8 diff --git a/gcc/cp/parser.cc b/gcc/cp/parser.cc index d77fbd20e56..09cba713437 100644 --- a/gcc/cp/parser.cc +++ b/gcc/cp/parser.cc @@ -19823,15 +19823,19 @@ cp_parser_simple_type_specifier (cp_parser* parser, "only available with " "%<-std=c++14%> or %<-std=gnu++14%>"); } + else if (!flag_concepts_ts && parser->in_template_argument_list_p) + pedwarn (token->location, 0, + "use of % in template argument " + "only available with %<-fconcepts-ts%>"); + else if (!flag_concepts) + pedwarn (token->location, 0, + "use of % in parameter declaration " + "only available with %<-std=c++20%> or %<-fconcepts%>"); else if (cxx_dialect < cxx14) error_at (token->location, "use of % in parameter declaration " "only available with " "%<-std=c++14%> or %<-std=gnu++14%>"); - else if (!flag_concepts) - pedwarn (token->location, 0, - "use of % in parameter declaration " - "only available with %<-std=c++20%> or %<-fconcepts%>"); } else type = make_auto (); @@ -24522,11 +24526,6 @@ cp_parser_template_type_arg (cp_parser *parser) = G_("types may not be defined in template arguments"); r = cp_parser_type_id_1 (parser, CP_PARSER_FLAGS_NONE, true, false, NULL); parser->type_definition_forbidden_message = saved_message; - if (cxx_dialect >= cxx14 && !flag_concepts && type_uses_auto (r)) - { - error ("invalid use of % in template argument"); - r = error_mark_node; - } return r; } diff --git a/gcc/testsuite/g++.dg/concepts/auto7.C b/gcc/testsuite/g++.dg/concepts/auto7.C new file mode 100644 index 00000000000..3cbf5dd8dfc --- /dev/null +++ b/gcc/testsuite/g++.dg/concepts/auto7.C @@ -0,0 +1,9 @@ +// { dg-do compile { target c++14 } } +// { dg-additional-options -fconcepts-ts } + +template struct A { }; +void f(A a) { } +int main() +{ + f(A()); +} diff --git a/gcc/testsuite/g++.dg/concepts/auto7a.C b/gcc/testsuite/g++.dg/concepts/auto7a.C new file mode 100644 index 00000000000..88868f45d1c --- /dev/null +++ b/gcc/testsuite/g++.dg/concepts/auto7a.C @@ -0,0 +1,8 @@ +// { dg-do compile { target c++14 } } + +template struct A { }; +void f(A a) { } // { dg-error "auto. in template argument" } +int main() +{ + f(A()); +}