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

David Blaikie dblaikie at gmail.com
Sun Sep 4 16:11:00 PDT 2011


[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).

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/20110904/614cfcfa/attachment.html>


More information about the cfe-commits mailing list