public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
From: Alexandre Oliva <aoliva@gcc.gnu.org>
To: gcc-cvs@gcc.gnu.org
Subject: [gcc(refs/users/aoliva/heads/testme)] c++: for contracts, cdtors never return this
Date: Sat, 18 Nov 2023 05:36:14 +0000 (GMT)	[thread overview]
Message-ID: <20231118053614.0C1233858C74@sourceware.org> (raw)

https://gcc.gnu.org/g:444347c11ba38a114d3a21c271265723418d72dd

commit 444347c11ba38a114d3a21c271265723418d72dd
Author: Alexandre Oliva <oliva@adacore.com>
Date:   Sat Nov 18 02:11:24 2023 -0300

    c++: for contracts, cdtors never return this
    
    When targetm.cxx.cdtor_return_this() holds, cdtors have a
    non-VOID_TYPE_P result, but IMHO this ABI implementation detail
    shouldn't leak to the abstract language conceptual framework, in which
    cdtors don't have return values.  For contracts, specifically those
    that establish postconditions on results, such a leakage is present,
    and the present patch puts an end to it: with it, cdtors get an error
    for result postconditions regardless of the ABI.  This fixes
    g++.dg/contracts/contracts-ctor-dtor2.C on arm-eabi.
    
    
    for  gcc/cp/ChangeLog
    
            * contracts.cc (check_postcondition_result): Cope with
            cdtor_return_this.

Diff:
---
 gcc/cp/contracts.cc | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/gcc/cp/contracts.cc b/gcc/cp/contracts.cc
index 66d2298a9bf..035ca4827e7 100644
--- a/gcc/cp/contracts.cc
+++ b/gcc/cp/contracts.cc
@@ -636,7 +636,11 @@ make_postcondition_variable (cp_expr id)
 bool
 check_postcondition_result (tree decl, tree type, location_t loc)
 {
-  if (VOID_TYPE_P (type))
+  /* Do not be confused by targetm.cxx.cdtor_return_this ();
+     conceptually, cdtors have no return value.  */
+  if (VOID_TYPE_P (type)
+      || DECL_CONSTRUCTOR_P (decl)
+      || DECL_DESTRUCTOR_P (decl))
     {
       error_at (loc,
 		DECL_CONSTRUCTOR_P (decl)

             reply	other threads:[~2023-11-18  5:36 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-11-18  5:36 Alexandre Oliva [this message]
2023-11-19  4:44 Alexandre Oliva
2023-11-23 11:46 Alexandre Oliva
2023-11-29  4:35 Alexandre Oliva

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20231118053614.0C1233858C74@sourceware.org \
    --to=aoliva@gcc.gnu.org \
    --cc=gcc-cvs@gcc.gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).