<p dir="ltr"><br>
On Nov 5, 2015 5:18 PM, "Richard Smith" <<a href="mailto:richard@metafoo.co.uk">richard@metafoo.co.uk</a>> wrote:<br>
><br>
> On Thu, Oct 29, 2015 at 8:04 PM, Nathan Wilson via cfe-dev <<a href="mailto:cfe-dev@lists.llvm.org">cfe-dev@lists.llvm.org</a>> wrote:<br>
>><br>
>> Hi,<br>
>><br>
>> Would someone mind explaining when (or when not) to mark a declaration, i.e. FunctionDecl or VarDecl, an invalid declaration?<br>
>><br>
>> Then, if the declaration is marked invalid, at what do we look at/use that information?<br>
><br>
> Here are some guidelines:<br>
><br>
>   * You must not mark a declaration as invalid unless you have emitted an error.<br>
>   * If you emitted an error with a fix-it hint, you should not mark the declaration as invalid (and you should recover as if the fix-it hint were applied). We would like this to be a hard rule, but there are existing cases where we don't follow this.<br>
>   * You should mark a declaration as invalid if you think it's sufficiently far from the user's intent that follow-on diagnostics should be suppressed.<br>
>   * You must mark a declaration as invalid if it does not correspond to anything like a valid declaration (if it would be unreasonable to expect downstream code to do the right thing with it).</p>
<p dir="ltr">Thanks for this Richard. That helps a lot.</p>
<p dir="ltr">So, I could (should?) have used a fix-it hint in the example above and not mark the declaration invalid, correct? (Aside from your third bullet.)</p>
<p dir="ltr">Would you be able to give an example of the fourth bullet and/or point to where the downstream code would do the right thing?<br>
</p>