This is the mail archive of the gcc-patches@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: Use conditional casting with symtab_node


Hi,

On Wed, 19 Sep 2012, Lawrence Crowl wrote:

> On 9/19/12, Eric Botcazou <ebotcazou@adacore.com> wrote:
> > > The language syntax would bind the conditional into the
> > > intializer, as in
> > >
> > >   if (varpool_node *vnode = (node->try_variable ()
> > >                              && vnode->finalized))
> > >     varpool_analyze_node (vnode);
> > >
> > > which does not type-match.
> > >
> > > So, if you want the type saftey and performance, the cascade
> > > is really unavoidable.
> >
> > Just write:
> >
> >   varpool_node *vnode;
> >
> >   if ((vnode = node->try_variable ()) && vnode->finalized)
> >     varpool_analyze_node (vnode);
> >
> > This has been the standard style for the past 2 decades and
> > trading it for cascading if's is really a bad idea.
> 
> Assignments in if statements are known to cause confusion.

So?  Make it:

  varpool_node *vnode = node->try_variable ();
  if (vnode && vnode->finalized)
    varpool_analyze_node (vnode);

> The point of the change is to limit the scope of the variable
> to the if statement, which prevents its unintended use later.

I'm not worried about this.

> Why do you think cascading ifs is a bad idea?

Precedent.  Confusion in case of dangling else (requiring more {}, and 
hence even more indentation).  Ugly.


Ciao,
Michael.


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