[{"id":3678181,"web_url":"http://patchwork.ozlabs.org/comment/3678181/","msgid":"<a7a640b6-4725-4239-8914-8d38de94186f@redhat.com>","list_archive_url":null,"date":"2026-04-16T13:42:06","subject":"Re: [PATCH] c++: -Wkeyword-macro vs. contracts","submitter":{"id":4337,"url":"http://patchwork.ozlabs.org/api/people/4337/","name":"Jason Merrill","email":"jason@redhat.com"},"content":"On 4/16/26 8:27 AM, Jakub Jelinek wrote:\n> Hi!\n> \n> contract_assert is a keyword listed in c_common_reswords for D_CXX26,\n> so no need to call cpp_warn separately on it, it is called already in\n>              tree id = get_identifier (c_common_reswords[i].word);\n>              if (IDENTIFIER_KEYWORD_P (id)\n>                  /* Don't register keywords with spaces.  */\n>                  && IDENTIFIER_POINTER (id)[IDENTIFIER_LENGTH (id) - 1] != ' ')\n>                cpp_warn (parse_in, IDENTIFIER_POINTER (id),\n>                          IDENTIFIER_LENGTH (id));\n> earlier.  contract_assert is also the only -fcontracts related keyword in\n> https://eel.is/c++draft/lex.key#tab:lex.key .  On the other side, pre/post\n> are identifiers with special meaning: https://eel.is/c++draft/tab:lex.name.special\n> and so need to be handled.  Note, contract_assert is also already correctly\n> tested in those tests.\n> \n> Tested on x86_64-linux, ok for trunk if this passes full bootstrap/regtest?\n\nOK.\n\n> 2026-04-16  Jakub Jelinek  <jakub@redhat.com>\n> \n> \t* lex.cc (cxx_init): Don't call cpp_warn on contract_assert,\n> \tinstead call it on pre and post.\n> \n> \t* g++.dg/warn/Wkeyword-macro-1.C: Expect error for pre/post for C++26.\n> \t* g++.dg/warn/Wkeyword-macro-2.C: Expect warning for pre/post for\n> \tC++26.\n> \t* g++.dg/warn/Wkeyword-macro-4.C: Expect error for pre/post for C++26.\n> \t* g++.dg/warn/Wkeyword-macro-5.C: Expect warning for pre/post for\n> \tC++26.\n> \t* g++.dg/warn/Wkeyword-macro-7.C: Likewise.\n> \t* g++.dg/warn/Wkeyword-macro-8.C: Likewise.\n> \n> --- gcc/cp/lex.cc.jj\t2026-03-27 10:17:14.021332583 +0100\n> +++ gcc/cp/lex.cc\t2026-04-16 13:55:47.995821223 +0200\n> @@ -421,7 +421,10 @@ cxx_init (void)\n>         if (cxx_dialect >= cxx26)\n>   \t{\n>   \t  if (flag_contracts)\n> -\t    cpp_warn (parse_in, \"contract_assert\");\n> +\t    {\n> +\t      cpp_warn (parse_in, \"pre\");\n> +\t      cpp_warn (parse_in, \"post\");\n> +\t    }\n>   \t  cpp_warn (parse_in, \"indeterminate\");\n>   \t}\n>       }\n> --- gcc/testsuite/g++.dg/warn/Wkeyword-macro-1.C.jj\t2026-03-27 10:17:16.315295149 +0100\n> +++ gcc/testsuite/g++.dg/warn/Wkeyword-macro-1.C\t2026-04-16 14:16:06.988539128 +0200\n> @@ -93,8 +93,8 @@\n>   #define import 1\t\t\t// { dg-error \"keyword 'import' defined as macro\" \"\" { target c++26 } }\n>   #define module 1\t\t\t// { dg-error \"keyword 'module' defined as macro\" \"\" { target c++26 } }\n>   #define override 1\t\t\t// { dg-error \"keyword 'override' defined as macro\" \"\" { target c++26 } }\n> -#define post 1\n> -#define pre 1\n> +#define post 1\t\t\t\t// { dg-error \"keyword 'post' defined as macro\" \"\" { target c++26 } }\n> +#define pre 1\t\t\t\t// { dg-error \"keyword 'pre' defined as macro\" \"\" { target c++26 } }\n>   #define replaceable_if_eligible\n>   #define trivially_relocatable_if_eligible\n>   \n> --- gcc/testsuite/g++.dg/warn/Wkeyword-macro-2.C.jj\t2026-03-27 10:17:16.315295149 +0100\n> +++ gcc/testsuite/g++.dg/warn/Wkeyword-macro-2.C\t2026-04-16 14:16:10.653477920 +0200\n> @@ -93,8 +93,8 @@\n>   #define import 1\t\t\t// { dg-warning \"keyword 'import' defined as macro\" \"\" { target c++26 } }\n>   #define module 1\t\t\t// { dg-warning \"keyword 'module' defined as macro\" \"\" { target c++26 } }\n>   #define override 1\t\t\t// { dg-warning \"keyword 'override' defined as macro\" \"\" { target c++26 } }\n> -#define post 1\n> -#define pre 1\n> +#define post 1\t\t\t\t// { dg-warning \"keyword 'post' defined as macro\" \"\" { target c++26 } }\n> +#define pre 1\t\t\t\t// { dg-warning \"keyword 'pre' defined as macro\" \"\" { target c++26 } }\n>   #define replaceable_if_eligible\n>   #define trivially_relocatable_if_eligible\n>   \n> --- gcc/testsuite/g++.dg/warn/Wkeyword-macro-4.C.jj\t2026-03-27 10:17:16.316295133 +0100\n> +++ gcc/testsuite/g++.dg/warn/Wkeyword-macro-4.C\t2026-04-16 14:16:17.027371472 +0200\n> @@ -93,8 +93,8 @@\n>   #undef import \t\t\t\t// { dg-error \"undefining keyword 'import'\" \"\" { target c++26 } }\n>   #undef module \t\t\t\t// { dg-error \"undefining keyword 'module'\" \"\" { target c++26 } }\n>   #undef override \t\t\t// { dg-error \"undefining keyword 'override'\" \"\" { target c++26 } }\n> -#undef post\n> -#undef pre\n> +#undef post\t \t\t\t// { dg-error \"undefining keyword 'post'\" \"\" { target c++26 } }\n> +#undef pre\t \t\t\t// { dg-error \"undefining keyword 'pre'\" \"\" { target c++26 } }\n>   #undef replaceable_if_eligible\n>   #undef trivially_relocatable_if_eligible\n>   \n> --- gcc/testsuite/g++.dg/warn/Wkeyword-macro-5.C.jj\t2026-03-27 10:17:16.316295133 +0100\n> +++ gcc/testsuite/g++.dg/warn/Wkeyword-macro-5.C\t2026-04-16 14:16:20.106320051 +0200\n> @@ -93,8 +93,8 @@\n>   #undef import \t\t\t\t// { dg-warning \"undefining keyword 'import'\" \"\" { target c++26 } }\n>   #undef module \t\t\t\t// { dg-warning \"undefining keyword 'module'\" \"\" { target c++26 } }\n>   #undef override \t\t\t// { dg-warning \"undefining keyword 'override'\" \"\" { target c++26 } }\n> -#undef post\n> -#undef pre\n> +#undef post\t \t\t\t// { dg-warning \"undefining keyword 'post'\" \"\" { target c++26 } }\n> +#undef pre\t \t\t\t// { dg-warning \"undefining keyword 'pre'\" \"\" { target c++26 } }\n>   #undef replaceable_if_eligible\n>   #undef trivially_relocatable_if_eligible\n>   \n> --- gcc/testsuite/g++.dg/warn/Wkeyword-macro-7.C.jj\t2026-03-27 10:17:16.316295133 +0100\n> +++ gcc/testsuite/g++.dg/warn/Wkeyword-macro-7.C\t2026-04-16 14:16:27.931189372 +0200\n> @@ -3,7 +3,6 @@\n>   // { dg-do preprocess }\n>   // { dg-options \"-Wkeyword-macro\" }\n>   // { dg-additional-options \"-fmodules\" { target c++20 } }\n> -// { dg-additional-options \"-fcontracts\" { target c++26 } }\n>   \n>   // [lex.key]\n>   #define alignas 1\t\t\t// { dg-warning \"keyword 'alignas' defined as macro\" \"\" { target c++11 } }\n> @@ -94,8 +93,8 @@\n>   #define import 1\t\t\t// { dg-warning \"keyword 'import' defined as macro\" \"\" { target c++20 } }\n>   #define module 1\t\t\t// { dg-warning \"keyword 'module' defined as macro\" \"\" { target c++20 } }\n>   #define override 1\t\t\t// { dg-warning \"keyword 'override' defined as macro\" \"\" { target c++11 } }\n> -#define post 1\n> -#define pre 1\n> +#define post 1\t\t\t\t// { dg-warning \"keyword 'post' defined as macro\" \"\" { target c++26 } }\n> +#define pre 1\t\t\t\t// { dg-warning \"keyword 'pre' defined as macro\" \"\" { target c++26 } }\n>   #define replaceable_if_eligible\n>   #define trivially_relocatable_if_eligible\n>   \n> --- gcc/testsuite/g++.dg/warn/Wkeyword-macro-8.C.jj\t2026-03-27 10:17:16.316295133 +0100\n> +++ gcc/testsuite/g++.dg/warn/Wkeyword-macro-8.C\t2026-04-16 14:16:31.945122335 +0200\n> @@ -3,7 +3,6 @@\n>   // { dg-do preprocess }\n>   // { dg-options \"-Wkeyword-macro\" }\n>   // { dg-additional-options \"-fmodules\" { target c++20 } }\n> -// { dg-additional-options \"-fcontracts\" { target c++26 } }\n>   \n>   // [lex.key]\n>   #undef alignas\t\t\t\t// { dg-warning \"undefining keyword 'alignas'\" \"\" { target c++11 } }\n> @@ -94,8 +93,8 @@\n>   #undef import\t\t\t\t// { dg-warning \"undefining keyword 'import'\" \"\" { target c++20 } }\n>   #undef module\t\t\t\t// { dg-warning \"undefining keyword 'module'\" \"\" { target c++20 } }\n>   #undef override\t\t\t\t// { dg-warning \"undefining keyword 'override'\" \"\" { target c++11 } }\n> -#undef post\n> -#undef pre\n> +#undef post\t\t\t\t// { dg-warning \"undefining keyword 'post'\" \"\" { target c++26 } }\n> +#undef pre\t\t\t\t// { dg-warning \"undefining keyword 'pre'\" \"\" { target c++26 } }\n>   #undef replaceable_if_eligible\n>   #undef trivially_relocatable_if_eligible\n>   \n> \n> \tJakub\n>","headers":{"Return-Path":"<gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org>","X-Original-To":["incoming@patchwork.ozlabs.org","gcc-patches@gcc.gnu.org"],"Delivered-To":["patchwork-incoming@legolas.ozlabs.org","gcc-patches@gcc.gnu.org"],"Authentication-Results":["legolas.ozlabs.org;\n\tdkim=pass (1024-bit key;\n unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256\n header.s=mimecast20190719 header.b=az+qJ+Id;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org\n (client-ip=2620:52:6:3111::32; helo=vm01.sourceware.org;\n envelope-from=gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org;\n receiver=patchwork.ozlabs.org)","sourceware.org;\n\tdkim=pass (1024-bit key,\n unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256\n header.s=mimecast20190719 header.b=az+qJ+Id","sourceware.org; dmarc=pass (p=quarantine dis=none)\n header.from=redhat.com","sourceware.org; spf=pass smtp.mailfrom=redhat.com","server2.sourceware.org;\n arc=none smtp.remote-ip=170.10.129.124"],"Received":["from vm01.sourceware.org (vm01.sourceware.org\n [IPv6:2620:52:6:3111::32])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519 server-signature ECDSA (secp384r1) server-digest SHA384)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4fxK2q4rbnz1yHP\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 16 Apr 2026 23:42:59 +1000 (AEST)","from vm01.sourceware.org (localhost [127.0.0.1])\n\tby sourceware.org (Postfix) with ESMTP id A04DB4B9DB6E\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 16 Apr 2026 13:42:57 +0000 (GMT)","from us-smtp-delivery-124.mimecast.com\n (us-smtp-delivery-124.mimecast.com [170.10.129.124])\n by sourceware.org (Postfix) with ESMTP id 86B6A4B9DB52\n for <gcc-patches@gcc.gnu.org>; Thu, 16 Apr 2026 13:42:11 +0000 (GMT)","from mail-qv1-f70.google.com (mail-qv1-f70.google.com\n [209.85.219.70]) by relay.mimecast.com with ESMTP with STARTTLS\n (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id\n us-mta-593-c7CPZg51PF2NXMTaqAXAsg-1; Thu, 16 Apr 2026 09:42:09 -0400","by mail-qv1-f70.google.com with SMTP id\n 6a1803df08f44-8ae752c5273so35997626d6.2\n for <gcc-patches@gcc.gnu.org>; Thu, 16 Apr 2026 06:42:09 -0700 (PDT)","from [192.168.50.130]\n (130-44-146-247.s12789.c3-0.arl-cbr1.sbo-arl.ma.cable.rcncustomer.com.\n [130.44.146.247]) by smtp.gmail.com with ESMTPSA id\n 6a1803df08f44-8ae6cbbc226sm35464276d6.37.2026.04.16.06.42.07\n (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);\n Thu, 16 Apr 2026 06:42:07 -0700 (PDT)"],"DKIM-Filter":["OpenDKIM Filter v2.11.0 sourceware.org A04DB4B9DB6E","OpenDKIM Filter v2.11.0 sourceware.org 86B6A4B9DB52"],"DMARC-Filter":"OpenDMARC Filter v1.4.2 sourceware.org 86B6A4B9DB52","ARC-Filter":"OpenARC Filter v1.0.0 sourceware.org 86B6A4B9DB52","ARC-Seal":"i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1776346931; cv=none;\n b=TCYfax3xfk9N8TMxXDVzqh9O+R3KEvbUPGuDaffI0/0vkRJIiPSdOaL5wzZjX8dYmcGtPSqzP0vJUuDygly1bWO7YjBFRtslIrk9kxcLfhxcneCnNPrmGG8wceFmGwyizD56sNN7wByfH4dq0PZuzI5JvD4NIMsSGMR6KI335hQ=","ARC-Message-Signature":"i=1; a=rsa-sha256; d=sourceware.org; s=key;\n t=1776346931; c=relaxed/simple;\n bh=fckE1UjJUPbzmqaY+7cFCdplkAGRyKGncxbzd4WjqXc=;\n h=DKIM-Signature:Message-ID:Date:MIME-Version:Subject:To:From;\n b=aiEaUuljI8nLInk2ovIqQ+ScjoBvReSwmq5dYpd2jrs45WwmrBlvtaYmnWX2zZpGtlgkC5ltDy0znMES2e4biVwTCwtgGXsR6ZtzLIWqIOgv+PGA8FcxsbGZA4U+IRLlojH9CDqs9NrKMEZY5+DZDVGdEOkqITaxk+8xfBkefkA=","ARC-Authentication-Results":"i=1; server2.sourceware.org","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;\n s=mimecast20190719; t=1776346931;\n h=from:from:reply-to:subject:subject:date:date:message-id:message-id:\n to:to:cc:cc:mime-version:mime-version:content-type:content-type:\n content-transfer-encoding:content-transfer-encoding:\n in-reply-to:in-reply-to:references:references;\n bh=Thkk574GX+cYc/2B+9OqUCu/WuAV1o9Uo/HIqNC05bY=;\n b=az+qJ+IdGy2IHradpGQAeu0QNv+Zy1/ZB9XM2W1xMrg9rw6kbDosysksruXyn6re59Ms89\n JYFxAI0JMKu4yx5ZWGRWBzvgO8tXQdMgYjAX7SCd/0sUBamOkvh8nsfF5QwPZZRqWApYgp\n h8JeMpVED3nvGniw1OVz3M1wEZz/vlc=","X-MC-Unique":"c7CPZg51PF2NXMTaqAXAsg-1","X-Mimecast-MFC-AGG-ID":"c7CPZg51PF2NXMTaqAXAsg_1776346929","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20251104; t=1776346929; x=1776951729;\n h=content-transfer-encoding:in-reply-to:from:content-language\n :references:cc:to:subject:user-agent:mime-version:date:message-id\n :x-gm-gg:x-gm-message-state:from:to:cc:subject:date:message-id\n :reply-to;\n bh=Thkk574GX+cYc/2B+9OqUCu/WuAV1o9Uo/HIqNC05bY=;\n b=U9aw4zw1G2hkGZPlDidebyElZffUb9hoTTnKI2A5ImcsYG/l+C2x0orr5qIywSxWOY\n /jYJrla3n6ImgPl/ss16p0Ekqnm7SIV3NylK3JdP8/1b5No5r6nXMAPtfSiYIaDDmr3m\n HVVYGTJyCcJp+/Ce6hmHzWBcWLf5z2c6cum8sVQR3jYYUfFbo+a4kjBtVZM+1W0M3ybP\n oyKcXS03cp1a+kxnNvPl847D3TdGPh1yPMNpnG0zY2WHnauFf89QfYoVpdj0zIdXK+S8\n lhPNdTMDlSPPU5Je4T07rnk2u5WR9N9zD8t3u0FRFT8cXp0RQQWCTdX7zwxXYbYwDjRa\n Dk6g==","X-Gm-Message-State":"AOJu0YwC41Sr198NBfinHOd59Gxkp2CFjSne4MVpeG1tsWaSAGD1APVP\n C0K4NyhMkEHlL9GOwgSYfQiRBVIQRxWpAh5BHkOf3MutdaRO3nRHtTP4FfkZ6An09T8+4soPYlN\n EfFMcPiFkhKGOYvxriNkmkaH/KICFCyFf56xSmpn9tgWYVCinnww599wdYGs=","X-Gm-Gg":"AeBDieubznvy2TrPrGf8ZJPoFdllWWn9UsXBFl1FRLLZQbxswYawml6NjSxCGSto8RJ\n A2t+2ytUvT0SO2iz0wW37fI9mPDrK+7G4MYa+7COlgEW0Icqce8abzVcB6pCUwIIoqoExt8ZdDY\n qX5XuON/6RNJpTD8YFgEnVemPNgF+xXMnrTXz9jtc5vo33y+BWZ2stqt4nf6SlURhujTn9MTr2u\n Td75LOe2041f5X+Mq7YlVBY3oD//ivh1Ayd/4FZ/QaoA0RjtZiWL1f0JJP6fi2cBLgQ+tvLcDxc\n b7zznAnwU+nScsxmXCzH5vo2ksjp4vcQVPG8uNoC0jK+IyipmWo+negfBpCLi1AL21KrWqkGj6A\n sLHe4QCpGAyCe82SsWfW+nGuMrz5Y1o95uKA4Ovj9Bx9ZUP1dSKYODyfOOvGjWLyTA4V82d019j\n m+ccRCezgSxizA46zM9OPcIrvDVtnJafeuPY+sFjVJzQ==","X-Received":["by 2002:a05:6214:5505:b0:8a1:8ddd:e12e with SMTP id\n 6a1803df08f44-8ac86313934mr398795356d6.48.1776346928875;\n Thu, 16 Apr 2026 06:42:08 -0700 (PDT)","by 2002:a05:6214:5505:b0:8a1:8ddd:e12e with SMTP id\n 6a1803df08f44-8ac86313934mr398794526d6.48.1776346928250;\n Thu, 16 Apr 2026 06:42:08 -0700 (PDT)"],"Message-ID":"<a7a640b6-4725-4239-8914-8d38de94186f@redhat.com>","Date":"Thu, 16 Apr 2026 09:42:06 -0400","MIME-Version":"1.0","User-Agent":"Mozilla Thunderbird","Subject":"Re: [PATCH] c++: -Wkeyword-macro vs. contracts","To":"Jakub Jelinek <jakub@redhat.com>","Cc":"gcc-patches@gcc.gnu.org","References":"<aeDVlLkXxFe9UM5l@tucnak>","From":"Jason Merrill <jason@redhat.com>","In-Reply-To":"<aeDVlLkXxFe9UM5l@tucnak>","X-Mimecast-Spam-Score":"0","X-Mimecast-MFC-PROC-ID":"QwxBL5U64_6RZzTPkYXB8u8D1sZ7hac0sBB5Xt3Ck7o_1776346929","X-Mimecast-Originator":"redhat.com","Content-Language":"en-US","Content-Type":"text/plain; charset=UTF-8; format=flowed","Content-Transfer-Encoding":"7bit","X-BeenThere":"gcc-patches@gcc.gnu.org","X-Mailman-Version":"2.1.30","Precedence":"list","List-Id":"Gcc-patches mailing list <gcc-patches.gcc.gnu.org>","List-Unsubscribe":"<https://gcc.gnu.org/mailman/options/gcc-patches>,\n <mailto:gcc-patches-request@gcc.gnu.org?subject=unsubscribe>","List-Archive":"<https://gcc.gnu.org/pipermail/gcc-patches/>","List-Post":"<mailto:gcc-patches@gcc.gnu.org>","List-Help":"<mailto:gcc-patches-request@gcc.gnu.org?subject=help>","List-Subscribe":"<https://gcc.gnu.org/mailman/listinfo/gcc-patches>,\n <mailto:gcc-patches-request@gcc.gnu.org?subject=subscribe>","Errors-To":"gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org"}}]