[prev in list] [next in list] [prev in thread] [next in thread] 

List:       cfe-commits
Subject:    Re: [PATCH] Fix crash parsing pragma after a case or a default
From:       Richard Smith <richard () metafoo ! co ! uk>
Date:       2013-09-21 22:25:41
Message-ID: CAOfiQqncYO3cH+m7Nf5PBph1_husz+aEnRxd-aQ1BtbE6w-X1Q () mail ! gmail ! com
[Download RAW message or body]

[Attachment #2 (multipart/alternative)]


Thanks, LGTM. Do you need someone to commit this for you?


On Fri, Sep 20, 2013 at 4:40 AM, Olivier Goffart <ogoffart@kde.org> wrote:

> I made the loop at a lower level.
> Notice that the diagnostic is slightly different when there is a #pragma
> after
> a case: and no statements.  But I think it does not matter.
>
>
> On Wednesday 18 September 2013 14:40:40 Richard Smith wrote:
> > I think the loop should be at a lower level. This also crashes today
> (while
> > diagnosing an empty loop body):
> >
> > int f() {
> >   if (false)
> > #pragma weak f
> >     return 0;
> >   return 1;
> > }
> >
> > ... and if we didn't have that diagnostic, we'd generate wrong code
> instead.
> > On Wed, Sep 18, 2013 at 1:09 AM, Olivier Goffart <ogoffart@kde.org>
> wrote:
> > > On Monday 16 September 2013 11:43:00 Richard Smith wrote:
> > > > I don't particularly like adding a NullStmt here -- there was no null
> > > > statement in the source code, so this is not a faithful AST
> > >
> > > representation
> > >
> > > > of the source.
> > > >
> > > > This approach seems like it will also accept this:
> > > >
> > > > switch (t) {
> > > >
> > > >   case 1:
> > > > #pragma weak t
> > > > }
> > > >
> > > > We should probably reject this, because there is no statement after
> the
> > > > case label. (That said, GCC accepts the above code, and fully treats
> > >
> > > these
> > >
> > > > pragmas as being statement-like entities, so your patch would be
> > > > bug-compatible with them.)
> > > >
> > > > Does the same issue exist for goto labels?
> > >
> > > The problem was the same for goto.
> > >
> > > I attached a new patch that reject invalid code.
> > >
> > > --
> > > Olivier
>

[Attachment #5 (text/html)]

<div dir="ltr">Thanks, LGTM. Do you need someone to commit this for you?</div><div \
class="gmail_extra"><br><br><div class="gmail_quote">On Fri, Sep 20, 2013 at 4:40 AM, \
Olivier Goffart <span dir="ltr">&lt;<a href="mailto:ogoffart@kde.org" \
target="_blank">ogoffart@kde.org</a>&gt;</span> wrote:<br> <blockquote \
class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc \
solid;padding-left:1ex">I made the loop at a lower level.<br> Notice that the \
diagnostic is slightly different when there is a #pragma after<br> a case: and no \
statements.  But I think it does not matter.<br> <div class="HOEnZb"><div \
class="h5"><br> <br>
On Wednesday 18 September 2013 14:40:40 Richard Smith wrote:<br>
&gt; I think the loop should be at a lower level. This also crashes today (while<br>
&gt; diagnosing an empty loop body):<br>
&gt;<br>
&gt; int f() {<br>
&gt;   if (false)<br>
&gt; #pragma weak f<br>
&gt;     return 0;<br>
&gt;   return 1;<br>
&gt; }<br>
&gt;<br>
&gt; ... and if we didn&#39;t have that diagnostic, we&#39;d generate wrong code \
instead.<br> &gt; On Wed, Sep 18, 2013 at 1:09 AM, Olivier Goffart &lt;<a \
href="mailto:ogoffart@kde.org">ogoffart@kde.org</a>&gt; wrote:<br> &gt; &gt; On \
Monday 16 September 2013 11:43:00 Richard Smith wrote:<br> &gt; &gt; &gt; I don&#39;t \
particularly like adding a NullStmt here -- there was no null<br> &gt; &gt; &gt; \
statement in the source code, so this is not a faithful AST<br> &gt; &gt;<br>
&gt; &gt; representation<br>
&gt; &gt;<br>
&gt; &gt; &gt; of the source.<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; This approach seems like it will also accept this:<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; switch (t) {<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt;   case 1:<br>
&gt; &gt; &gt; #pragma weak t<br>
&gt; &gt; &gt; }<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; We should probably reject this, because there is no statement after \
the<br> &gt; &gt; &gt; case label. (That said, GCC accepts the above code, and fully \
treats<br> &gt; &gt;<br>
&gt; &gt; these<br>
&gt; &gt;<br>
&gt; &gt; &gt; pragmas as being statement-like entities, so your patch would be<br>
&gt; &gt; &gt; bug-compatible with them.)<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; Does the same issue exist for goto labels?<br>
&gt; &gt;<br>
&gt; &gt; The problem was the same for goto.<br>
&gt; &gt;<br>
&gt; &gt; I attached a new patch that reject invalid code.<br>
&gt; &gt;<br>
&gt; &gt; --<br>
&gt; &gt; Olivier<br>
</div></div></blockquote></div><br></div>



_______________________________________________
cfe-commits mailing list
cfe-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic