[{"id":3675463,"web_url":"http://patchwork.ozlabs.org/comment/3675463/","msgid":"<0630c64f-0b0b-436d-8589-d26685fa0294@redhat.com>","list_archive_url":null,"date":"2026-04-09T18:51:59","subject":"Re: [PATCH] c++, contracts: Account for lambda captures in pre/post\n [PR124648].","submitter":{"id":4337,"url":"http://patchwork.ozlabs.org/api/people/4337/","name":"Jason Merrill","email":"jason@redhat.com"},"content":"On 4/8/26 5:53 AM, Iain Sandoe wrote:\n> This is a second issue that appears once the exclusion of implicit\n> lambda captures is fixed.  Tested on x86_64-darwin, powerpc64le-linux\n> OK for trunk/when?\n> thanks\n> Iain\n> \n> --- 8< ---\n> \n> When we have lambda captures, they appear in the vars slot of a bind\n> expression at the outer operator() body.\n> \n> We need these to be visible for any pre or post conditions that might\n> use them, therefore (when a lambda has captures) nest the application\n> of contract pre and post conditions within the lambda outer bind\n> expression.\n> \n> \tPR c++/124648\n> \n> gcc/cp/ChangeLog:\n> \n> \t* contracts.cc (maybe_apply_function_contracts): Nest pre and\n> \tpost conditions inside the outer bind expression of a lambda\n> \twith captures.\n> \n> Signed-off-by: Iain Sandoe <iain@sandoe.co.uk>\n> ---\n>   gcc/cp/contracts.cc | 12 ++++++++++++\n>   1 file changed, 12 insertions(+)\n> \n> diff --git a/gcc/cp/contracts.cc b/gcc/cp/contracts.cc\n> index d2dba3c62e6..760327d2020 100644\n> --- a/gcc/cp/contracts.cc\n> +++ b/gcc/cp/contracts.cc\n> @@ -1352,6 +1352,18 @@ maybe_apply_function_contracts (tree fndecl)\n>         DECL_SAVED_TREE (fndecl) = push_stmt_list ();\n>       }\n>   \n> +  /* If we have a lambda with captures, ensure that those captures are in-\n> +     scope for pre and post conditions.  */\n> +  if (LAMBDA_TYPE_P (CP_DECL_CONTEXT (fndecl))\n\nThis could be LAMBDA_FUNCTION_P.  OK with that change.\n\n> +      && TREE_CODE (fnbody) == BIND_EXPR)\n> +    {\n> +      tree extract = BIND_EXPR_BODY (fnbody);\n> +      BIND_EXPR_BODY (fnbody) = NULL_TREE;\n> +      add_stmt (fnbody);\n> +      BIND_EXPR_BODY (fnbody) = push_stmt_list ();\n> +      fnbody = extract;\n> +    }\n> +\n>     /* Now add the pre and post conditions to the existing function body.\n>        This copies the approach used for function try blocks.  */\n>     tree compound_stmt = begin_compound_stmt (0);","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=fPgYCVdG;\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=fPgYCVdG","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 4fs8FK1K1Sz1yHG\n\tfor <incoming@patchwork.ozlabs.org>; Fri, 10 Apr 2026 04:52:37 +1000 (AEST)","from vm01.sourceware.org (localhost [127.0.0.1])\n\tby sourceware.org (Postfix) with ESMTP id 54AF34BA2E27\n\tfor <incoming@patchwork.ozlabs.org>; Thu,  9 Apr 2026 18:52:35 +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 E9F434BA2E10\n for <gcc-patches@gcc.gnu.org>; Thu,  9 Apr 2026 18:52:06 +0000 (GMT)","from mail-qt1-f198.google.com (mail-qt1-f198.google.com\n [209.85.160.198]) by relay.mimecast.com with ESMTP with STARTTLS\n (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id\n us-mta-695-9wUhmfxNP5ySONTGiyt3bA-1; Thu, 09 Apr 2026 14:52:04 -0400","by mail-qt1-f198.google.com with SMTP id\n d75a77b69052e-50b781542c1so27136941cf.1\n for <gcc-patches@gcc.gnu.org>; Thu, 09 Apr 2026 11:52:04 -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 d75a77b69052e-50dd54dce5asm2952451cf.19.2026.04.09.11.52.00\n (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);\n Thu, 09 Apr 2026 11:52:00 -0700 (PDT)"],"DKIM-Filter":["OpenDKIM Filter v2.11.0 sourceware.org 54AF34BA2E27","OpenDKIM Filter v2.11.0 sourceware.org E9F434BA2E10"],"DMARC-Filter":"OpenDMARC Filter v1.4.2 sourceware.org E9F434BA2E10","ARC-Filter":"OpenARC Filter v1.0.0 sourceware.org E9F434BA2E10","ARC-Seal":"i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1775760727; cv=none;\n b=N9+VysDIEWSFtT8S3cOx4csrJHs8PgbSg38ETnrSkYM71GYdeLS//y3Xu8nd6ParBcjjkhwdwSGYHMzBtoxjsj3suEvECLUVq9eFEWucHw4jl0D2Z4+f6hIFmjRhlLREyLKlHRwQzqVeY/CRunS7jzqBZr1ybKN5+3sLlkk4svw=","ARC-Message-Signature":"i=1; a=rsa-sha256; d=sourceware.org; s=key;\n t=1775760727; c=relaxed/simple;\n bh=rR+t3C3Yl4AqUKuGqWeVtAUYBYKiQ2XcYFn/4SMZSEg=;\n h=DKIM-Signature:Message-ID:Date:MIME-Version:Subject:To:From;\n b=qjLGqrJxUQyJNnGjtYEycL4fauwtiI8PAAaxCHuflcskirmKK/MzooswJxpvo5XuSHjYGzAg7z55DYOLXNAiRsTk0zJqqvwof6jwubrCDtqt8a+iub7nJRexqdG2PVSxpm+Jv3iox86lVt2fAgNUyZGnhbxFj8k3cyW5XYmlwKs=","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=1775760726;\n h=from:from:reply-to:subject:subject:date:date:message-id:message-id:\n to:to: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=Y29ZPpdSuE+hv5vG6FmwKVWw2zLC719gytvMJZc7OlQ=;\n b=fPgYCVdGge4dwUPqpWNp4ZGe4kEi044iC1Is6w3HGBkKPmFw6yUwWMDK4ZZJIYa80dmwpJ\n 3WWoP/5yAmrRXSnWEiTdDxSTMVK5X25K5J1cC6ErtZrXZVPJuekT9FfZ7wgNgbHpGcIONh\n t6Ujo6c7QZZz8ABbvR3JDyURER2eFWg=","X-MC-Unique":"9wUhmfxNP5ySONTGiyt3bA-1","X-Mimecast-MFC-AGG-ID":"9wUhmfxNP5ySONTGiyt3bA_1775760724","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20251104; t=1775760723; x=1776365523;\n h=content-transfer-encoding:in-reply-to:from:content-language\n :references: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=Y29ZPpdSuE+hv5vG6FmwKVWw2zLC719gytvMJZc7OlQ=;\n b=nBHaBi+mVZ8ZdzuwUCjikCEuOzIRgZS1B1xD03GZf3mJ0x2SGFuLGQ2ykQZM5l8zVg\n pDXWMkb825G+LcybW3HLpb4ndFO8qPVa6EzEzOEyGSg2f0eYcyONcO1kemvi+WbW4bx/\n ewAPqBv+f5+/5mXXQaU64Kxfw9rdKeEVfY8p2fpoLxh4BvRwmBqLl9TP+LQWNcU/uRRb\n yk39jE9uB/QzXqzfAUurhLFU+36S1x0Ll4M77Mjc7RQa3m6Ed7SsPwc4EcJxbQIgbb/R\n XvbkZdJ4+EqwbXLt1Q53PXs3QWa6OPRou3FzrgvPPdTTlehoRJ24jN7Eyan+6wUNHFxc\n QumQ==","X-Forwarded-Encrypted":"i=1;\n AJvYcCUUP1+3UTFO+CpZJT9wDg+d5H9+/ioJh7pWsZGCJ26+M50nxxBi60iy4psOFEA7/65STrl4Kq8Gl8hziw==@gcc.gnu.org","X-Gm-Message-State":"AOJu0YwfENOewZhC41rE/ECvRTuLM2D/lAD2uTzGaU3YDbvLntETqMB1\n RuiwPDQ0eynJXi9AAXk93F1rlZmszIEh4iOE+rQFNyXdi9DPLLzbrhCzvBIweQwbKOabC2Df6S4\n TAYJxOVf03ROijD2cg+i9NBMAiONrNqm6AMiSv4DC0PhQl3IvV3SFRRp4pdre6SVpYyurTg==","X-Gm-Gg":"AeBDievcLmmpeqyicvwhaUew2tIUIz1a78Xw7taNofYP19PLZiNCoecw4q+7nN/8Ym9\n mU/wyFaHMhp0k9uh9g5lOI6W/da35UvTkQ53D3elgaoF8HzApuP76jsA6fnmTPAxhvGV1Dz6ZU5\n 9YE7I8MJUbvB2VNLmS0OEAk8I59dE4n4zLmc5u4g+xqgPiJjZnRYwepozq3V4bkitrmC1K+F/rB\n jh06J9NjNYeuHyUV1NQMTfhTyHQWb2LxZfgFberSskD/uRxLwvVEZ1rys+NvKj6S+FD487clRvh\n 3V6ID3lZ89l9YTUgFOtu7JdMDtq0Bqf+BG2TrjNfWGjbCZKvOu6UBFTRnpyiVXwa912sSVbQKOI\n Jr659+yPHsM+9lmL90dgnpCu7fe1bgD59KCwiFnZvRTmoZjSsGAyDQFkefOazfrQJd9/31+BYt+\n DgEZU+12U4qN4Hh1AOUGYd9KdVaX3qZxs=","X-Received":["by 2002:a05:622a:993:b0:509:3257:c050 with SMTP id\n d75a77b69052e-50dd5b00a8bmr6142161cf.24.1775760723027;\n Thu, 09 Apr 2026 11:52:03 -0700 (PDT)","by 2002:a05:622a:993:b0:509:3257:c050 with SMTP id\n d75a77b69052e-50dd5b00a8bmr6141671cf.24.1775760722497;\n Thu, 09 Apr 2026 11:52:02 -0700 (PDT)"],"Message-ID":"<0630c64f-0b0b-436d-8589-d26685fa0294@redhat.com>","Date":"Thu, 9 Apr 2026 14:51:59 -0400","MIME-Version":"1.0","User-Agent":"Mozilla Thunderbird","Subject":"Re: [PATCH] c++, contracts: Account for lambda captures in pre/post\n [PR124648].","To":"iain@sandoe.co.uk, gcc-patches@gcc.gnu.org","References":"<20260408095354.49694-1-iain@sandoe.co.uk>","From":"Jason Merrill <jason@redhat.com>","In-Reply-To":"<20260408095354.49694-1-iain@sandoe.co.uk>","X-Mimecast-Spam-Score":"0","X-Mimecast-MFC-PROC-ID":"ADIK-OmmbFOP15leJz8r_-yzfqx3_U3UzSZb_gbZnJ8_1775760724","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"}}]