public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
From: Gabriel Dos Reis <gdr@integrable-solutions.net>
To: Zack Weinberg <zack@codesourcery.com>
Cc: Mark Mitchell <mark@codesourcery.com>,
	Richard Henderson <rth@redhat.com>,
	Jakub Jelinek <jakub@redhat.com>,
	Aldy Hernandez <aldyh@redhat.com>,
	"gcc-patches@gcc.gnu.org" <gcc-patches@gcc.gnu.org>,
	"jason@redhat.com" <jason@redhat.com>
Subject: Re: [basic-improvements] try/finally support for c/c++ - more tests
Date: Wed, 06 Nov 2002 19:33:00 -0000	[thread overview]
Message-ID: <m3r8dyvys1.fsf@soliton.integrable-solutions.net> (raw)
In-Reply-To: Zack Weinberg's message of "Wed, 6 Nov 2002 18:58:07 -0800"

Zack Weinberg <zack@codesourcery.com> writes:

| On Thu, Nov 07, 2002 at 03:14:25AM +0100, Gabriel Dos Reis wrote:
| > Zack Weinberg <zack@codesourcery.com> writes:
| > 
| > | p.s. It would be nifty if setjmp/longjmp could be defined in terms of
| > | exception handling.  Anyone put thought into that?
| > 
| > EH in C++ sense essentially makes control flow flows one direction
| > whereas setjmp/longjmp transfers control virtually anywhere. 
| 
| Imagine a setup like this:
| 
| class jmp_buf { 
|   int setjmp_return_value;
| } __attribute__ ((always_passed_by_reference));
| 
| void calls_longjmp(jmp_buf env)
| {
|     env.setjmp_return_value = 1;
|     throw env;
| }
|    
| void calls_setjmp(void)
| {
|     try {
|         jmp_buf env;
|         env.setjmp_return_value = 0;
| 
| control_transfers_here_twice:
|         if (env.setjmp_return_value == 0) {
|             puts("first call to setjmp()");
|             calls_longjmp(env);
|         } else {
|             puts("second call to setjmp()");
|         }
| 
|     } catch (jmp_buf E) {
|         if (&E != &env)
|             throw;
|         goto control_transfers_here_twice;
|     }
| }
| 
| The "always_passed_by_reference" bit ensures that when control
| transfers to the catch clause, &E == &env if and only if it was
| 'env' that got longjmped to.

I'm not sure that extra linguistic facility is really in accordance
with C++ rules (I'm not sure 12.8/15 applies here).  Furthermore after
call to calls_longjmp(), the object env ceases existing -- it isn't
even visible in the catch block so I assume you wanted

     jmp_buf env;
     try {
       env.setjmp_return_value = 0;
       // ...

[...]

| I claim that any use of setjmp/longjmp that won't work with this
| implementation is already invoking undefined behavior.

Well, let's first address the case of situations that "work" with the
above scheme before addressing the validity of the claim.  What is
supposed to happen for the rethrow case?

-- Gaby

  reply	other threads:[~2002-11-07  3:33 UTC|newest]

Thread overview: 128+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2002-11-05 15:16 [basic-improvements] try/finally support for c/c++ Aldy Hernandez
2002-11-05 15:57 ` Richard Henderson
2002-11-05 23:03   ` Aldy Hernandez
2002-11-06  0:44     ` Joseph S. Myers
2002-11-06  0:52       ` Jakub Jelinek
2002-11-06  3:02         ` Michael Matz
2002-11-06  3:11           ` Jakub Jelinek
2002-11-06  4:16             ` Michael Matz
2002-11-06 10:29       ` Aldy Hernandez
2002-11-06 10:53         ` Richard Henderson
2002-11-06 10:56           ` Aldy Hernandez
2002-11-06 11:24           ` Joseph S. Myers
2002-11-06 13:49             ` Richard Henderson
2002-11-06 17:45           ` Fergus Henderson
2002-11-07  9:54             ` Richard Henderson
2002-11-06 17:48           ` Fergus Henderson
2002-11-07  9:58             ` Richard Henderson
2002-11-06 11:22         ` Joseph S. Myers
2002-11-06 14:00           ` Richard Henderson
2002-11-06 17:21         ` Fergus Henderson
2002-11-06  4:20   ` Gabriel Dos Reis
2002-11-06  9:05     ` Aldy Hernandez
2002-11-06  9:11       ` Matt Austern
2002-11-06  9:25         ` Gabriel Dos Reis
2002-11-06 11:15         ` Richard Henderson
2002-11-07  0:09           ` Kai Henningsen
2002-11-07 12:56             ` Richard Henderson
2002-11-06  6:05   ` Jason Merrill
2002-11-06 10:56     ` Richard Henderson
2002-11-06 12:14       ` Jason Merrill
2002-11-05 16:40 ` Stan Shebs
2002-11-05 16:48   ` Matt Austern
2002-11-05 17:21     ` Jason Merrill
2002-11-05 19:25       ` Matt Austern
2002-11-06 10:25         ` Richard Henderson
2002-11-06 11:05         ` Mike Stump
2002-11-05 21:20     ` Aldy Hernandez
2002-11-06  9:43 ` [basic-improvements] try/finally support for c/c++ - more tests Jakub Jelinek
2002-11-06 11:04   ` Joseph S. Myers
2002-11-06 15:34   ` Mark Mitchell
2002-11-06 16:03     ` Richard Henderson
2002-11-06 16:10       ` Gabriel Dos Reis
2002-11-06 16:12         ` Richard Henderson
2002-11-06 16:20           ` Gabriel Dos Reis
2002-11-06 17:02             ` Per Bothner
2002-11-06 17:14               ` Gabriel Dos Reis
2002-11-06 16:47       ` Mark Mitchell
2002-11-06 16:54         ` Matt Austern
2002-11-06 18:00         ` Zack Weinberg
2002-11-06 18:14           ` Gabriel Dos Reis
2002-11-06 18:58             ` Zack Weinberg
2002-11-06 19:33               ` Gabriel Dos Reis [this message]
2002-11-06 22:15                 ` Zack Weinberg
2002-11-06 22:37           ` Mark Mitchell
2002-11-06 23:30             ` Aldy Hernandez
2002-11-07  1:03               ` Gabriel Dos Reis
2002-11-07  5:34             ` Michael Matz
2002-11-07  8:14               ` Mark Mitchell
2002-11-07  8:37                 ` Daniel Jacobowitz
2002-11-07  9:09                   ` Mark Mitchell
2002-11-07  9:19                     ` Daniel Jacobowitz
2002-11-07  9:53                       ` Mark Mitchell
2002-11-07  9:57                         ` Matt Austern
2002-11-07 10:43                         ` Jason Merrill
2002-11-07  8:44                 ` Jakub Jelinek
2002-11-07 12:18                 ` Geoff Keating
2002-11-07 12:24                   ` Daniel Jacobowitz
2002-11-07 12:32                   ` Mark Mitchell
2002-11-07 13:41                     ` Geoff Keating
2002-11-07 14:06                       ` Mark Mitchell
2002-11-07 14:39                         ` Richard Henderson
2002-11-07 14:53                           ` Mark Mitchell
2002-11-07 15:14                             ` Geoff Keating
2002-11-07 15:37                               ` Mark Mitchell
2002-11-08 11:30                                 ` Geoff Keating
2002-11-07 15:45                             ` Richard Henderson
2002-11-07 16:21                               ` Mark Mitchell
2002-11-07 16:44                                 ` aldyh
2002-11-07 17:06                                 ` Richard Henderson
2002-11-07 17:10                                 ` Jakub Jelinek
2002-11-07 17:29                                   ` Mark Mitchell
2002-11-07 17:43                                     ` Richard Henderson
2002-11-07 17:55                                       ` Mark Mitchell
2002-11-07 17:52                                     ` Jason Merrill
2002-11-07 17:57                                       ` Mark Mitchell
2002-11-07 18:17                                         ` Zack Weinberg
2002-11-07 18:29                                           ` Mark Mitchell
2002-11-07 21:23                                             ` Robert Lipe
2002-11-07 21:32                                               ` Jason Merrill
2002-11-08  4:48                                             ` Nicola Pero
2002-11-08  5:47                                               ` Jakub Jelinek
2002-11-08 10:02                                                 ` Fergus Henderson
2002-11-08 11:24                                                 ` Kai Henningsen
2002-11-08 11:44                                                   ` Jakub Jelinek
2002-11-09  0:11                                                     ` Fergus Henderson
2002-11-08 11:46                                                   ` Mike Stump
2002-11-08 10:02                                             ` Matt Austern
2002-11-11  5:38                                               ` Michael Matz
2002-11-11 12:59                                                 ` Matt Austern
2002-11-12  1:01                                                   ` Michael Matz
2002-11-12  8:20                                                     ` Mark Mitchell
2002-11-12  8:58                                                       ` Michael Matz
2002-11-07 19:28                                         ` Daniel Jacobowitz
2002-11-07 22:07                                 ` Alexandre Oliva
2002-11-08  4:27                                   ` Richard Henderson
2002-11-08  4:54                                     ` Jakub Jelinek
2002-11-08  6:01                                       ` Jakub Jelinek
2002-11-08 11:38                                       ` Mike Stump
2002-11-08 11:25                                     ` Mike Stump
2002-11-08  9:31                                 ` Michael Matz
2002-11-08 11:26                                   ` Hans-Peter Nilsson
2002-11-08 11:48                                     ` Mike Stump
2002-11-07 11:38               ` Zack Weinberg
2002-11-07  9:38             ` Mike Stump
2002-11-07 10:06           ` Richard Henderson
2002-11-07 12:57           ` Hans-Peter Nilsson
2002-11-06 17:58       ` Fergus Henderson
2002-11-06 18:09         ` Fergus Henderson
2002-11-07  0:30         ` Jakub Jelinek
2002-11-06 18:34       ` Geoff Keating
2002-11-07  3:29         ` Fergus Henderson
2002-11-07  4:22           ` Jakub Jelinek
2002-11-07  5:13             ` Fergus Henderson
2002-11-07  5:47               ` Michael Matz
2002-11-07  8:52               ` Aldy Hernandez
2002-11-07 10:00                 ` Mike Stump
2002-11-07 12:36                 ` Alexandre Oliva
2002-11-07 13:06                   ` Aldy Hernandez

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=m3r8dyvys1.fsf@soliton.integrable-solutions.net \
    --to=gdr@integrable-solutions.net \
    --cc=aldyh@redhat.com \
    --cc=gcc-patches@gcc.gnu.org \
    --cc=jakub@redhat.com \
    --cc=jason@redhat.com \
    --cc=mark@codesourcery.com \
    --cc=rth@redhat.com \
    --cc=zack@codesourcery.com \
    /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).