This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: [ast-optimizer-branch] simplifying C++
- From: Diego Novillo <dnovillo at redhat dot com>
- To: Jason Merrill <jason at redhat dot com>
- Cc: Daniel Berlin <dberlin at dberlin dot org>,"gcc at gcc dot gnu dot org" <gcc at gcc dot gnu dot org>
- Date: 17 Jun 2002 12:24:50 -0400
- Subject: Re: [ast-optimizer-branch] simplifying C++
- References: <wvlsn3l6g8o.fsf@prospero.cambridge.redhat.com>
On Mon, 2002-06-17 at 12:07, Jason Merrill wrote:
> I've been thinking about simplifying C++, and the complex scoping that C++
> loops have. In a for loop, a decl in the for-init-stmt is in scope for the
> duration of the loop; a decl in the condition is in scope within an
> iteration, goes out of scope, and back in. The first can be dealt with
> simply by wrapping the loop in a scope.
>
Are these the same rules as for C99? When I ran into this one last
week, the front end was already enclosing the loop in a scope, so the
simplifier didn't have to do much more than recognizing DECL_STMTs
inside FOR_INIT_STMT.
> {
> int i;
> for (i = 42; ; --i)
> {
> A* T.1;
> bool T.2;
> bool T.3;
> A a;
> T.1 = &a;
> T.2 = i == 24;
> A::ctor (T.1, T.2);
> __with_cleanup (A::dtor (T.1))
> {
> T.3 = a.operator bool();
> if (T.3 == 0)
> break;
> ...
> }
> }
> }
>
> I think it's best to leave the cleanup in this structured form initially,
> and deal with adding it to the various block exits later.
>
Not pretty, but that's how we're dealing with statement expressions
now. Ideally, we should inline expand all these constructs.
Would it be too inconvenient to replace the FOR_EXPR with T.3 in the
above code instead of having a break inside __with_cleanup?
Diego.