[cfe-commits] [cfe-dev] Fixits for invalid main declarations

Douglas Gregor dgregor at apple.com
Wed Sep 7 15:56:01 PDT 2011


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 <dblaikie at gmail.com> 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
> 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20110907/4e5829e7/attachment.html>


More information about the cfe-commits mailing list