[ast-optimizer-branch] simplifying C++
Diego Novillo
dnovillo@redhat.com
Mon Jun 17 09:31:00 GMT 2002
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.
More information about the Gcc
mailing list