On Sep 4, 2011, at 4:11 PM, David Blaikie wrote:

> [hmm - one problem with this, and I'm not sure it can be solved, is the case 
> of multiple declarations:
> 
> static int main(), foo; - in this case we might not want to suggest the fixit 
> because it'll affect another declaration. Or is that narrow enough not to 
> worry? If not, how would I go about testing whether a given DeclSpec is for 
> more than one declaration? (If indeed that's even known - perhaps we haven't 
> even parsed up to the point where we'd know there was more than one). 

At this point, we haven't parsed anything beyond this declarator, so we don't 
know if the DeclSpec is for a single declaration or multiple declarations. I 
think it's narrow enough not to worry about.

        - Doug

> I came across this when I was thinking about improving the diagnostics 
> emitted by Sema::DiagnoseFunctionSpecifiers & there's a TODO comment 
> mentioning the case of "inline int a(), b;"]
> 
> On Sun, Sep 4, 2011 at 2:48 PM, David Blaikie <[email protected]> wrote:
> Here's a patch to add FixIt diagnostics to the "main cannot/should not be 
> static" and "main cannot be inline" warnings/errors.
> 
> Some context from a previous email conversation with Douglas Gregor:
>  
> No, main cannot be a template.
> 
> Seems the error for templated main was coming from the 
> ActOnFunctionDeclarator use case anyway - by the time we got to template 
> instantiation we'd already diagnosed this problem so it was just redundant to 
> check there.
>  
> 
>> So should we just push the isMain/checkMain checking up into 
>> ActOnFunctionDeclarator instead? Then it wouldn't add any overhead to 
>> irrelevant contexts (methods & templates) & the checking could be more 
>> descriptive.
> 
> Works for me!
> 
> So I've done that - pulling out the first few checks from 
> CheckFunctionDeclaration into the two call sites in ActOnFunctionDeclarator & 
> then passing the DeclSpec to the CheckMain calls. I could refactor that 
> common "IsMain/CheckMain/CheckFunctionDeclarator" into one function to use 
> from these two (non-C++ and C++) call sites in ActOnFunctionDeclarator if you 
> think that'd be better.
> 
> I also split up the static/inline warnings so they could warn against the 
> keyword rather than against the 'main' (when warning against the 'main' and 
> issuing a fixit for 'static' on a different line (or inside a macro), the 
> diagnostic just printed out without the fixit) - this seemed consistent with 
> other cases relating to spurious static in SemaDecl.cpp (some other cases 
> include the fixit, some don't - I'll see about making some patches for those 
> other missing fixits too).
> 
> After this I'll just keep working my way down through CheckMain to add fixits 
> to each of the suggestions where they're applicable.
> 
> - David
> 

_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to