This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [ast-optimizer-branch] simplifying C++


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.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]