[cfe-commits] [LLVMdev] clang errors on void main()

David Blaikie dblaikie at gmail.com
Fri Feb 10 12:16:57 PST 2012


2012/2/10 Vasiliy Korchagin <korchagin at ispras.ru>:
> On 10.02.2012 19:45, David Blaikie wrote:
>>
>> 2012/2/9 Vasiliy Korchagin<korchagin at ispras.ru>:
>>>
>>> On 08.02.2012 23:47, David Blaikie wrote:
>>>
>>> On Wed, Feb 8, 2012 at 11:25 AM, Chris Lattner<clattner at apple.com>
>>>  wrote:
>>>
>>> On Feb 8, 2012, at 5:31 AM, Vasiliy Korchagin wrote:
>>>
>>> 07.02.2012 07:27, Eli Friedman пишет:
>>>
>>> On Mon, Feb 6, 2012 at 6:51 PM, Xin Tong<xerox.time.tech at gmail.com>
>>>  wrote:
>>>
>>> Is there any way to stop this ?
>>>
>>> /home/socrates/llvm/llvm-3.0.src/benchmarks/powerstone/crc/crc.c:67:1:
>>> error: 'main' must return 'int'
>>> void main()
>>> ^
>>> 1 error generated.
>>>
>>> You mean besides fixing the source of your benchmark so it's valid C?
>>> Not at the moment... patches welcome.
>>>
>>> -Eli
>>>
>>> We suggest patch for allowing main() function to have non-integer return
>>> type. This feature can be enabled with "-allow-non-int-main" option. In
>>> this
>>> case warning about incorrect main() return type will be printed instead
>>> of
>>> error.
>>>
>>> In patch also included test case for this feature.
>>>
>>> Vasiliy Korchagin,
>>>
>>> Hi Vasiliy,
>>>
>>> Please send clang patches to cfe-dev.
>>>
>>> or even cfe-commits (further instructions are here:
>>> http://clang.llvm.org/get_involved.html)
>>>
>>> [I've dropped llvm-dev and added cfe-commits to this email]
>>>
>>> My first thought based on your description alone would be that we
>>> should support this, if at all, probably in the way that GCC already
>>> does - surfacing non-int returning main as a warning in C (under
>>> -Wmain) and error in C++ (as it is already) if that's practical.
>>>
>>> &  looking at the patch itself: Your change is even more permissive
>>> than GCC (when you use the flag you've added) allowing C++ to have
>>> void returning main. I don't see any need to be so accepting.
>>>
>>> (&  the change you've made in Sema::ActOnFinishFunctionBody scares me a
>>> bit - what does that do when you have int returning main but you turn
>>> this flag on? not allow implicit return 0? that seems problematic)
>>>
>>> - David
>>>
>>> David, thanks for your reply.
>>>
>>> Seems like my response missed mailing list, so I'm sending it again.
>>> I changed the patch and now "-allow-non-int-main" option allows to print
>>> a warning in C and error in C++ in case of non-integer main. I also
>>> fixed implicit returning 0.
>>
>> Sorry, I just didn't get around to replying - I still think this
>> should be under the -Wmain flag, probably - like it is in GCC. But I
>> could be wrong - hopefully someone else pipes up with an opinion too.
>>
>> (it's possible it should be stronger - perhaps a separate warning that
>> defaults to error - but I don't think it should be an entirely
>> new/separate flag)
>>
>> - David
>
> I reduced patch and now it provides GCC-like behavior. In C clang prints a
> warning and in C++ prints error. The warning is under control of -Wmain
> flag.

This looks better - though do you need the change in codegen? what
happens if you remove that (leave it as it was before)? & some test
cases would be good.

I'm still a bit concerned about relaxing the default behavior too much
- hopefully other Clang developers will chime in with a more informed
opinion on this, but perhaps we'll want to group this particular
warning under its own flag (main-return-type ?) & make that diagnostic
an error by default (this is a weird device to use & it turns up in a
few other places in Clang, but it might be an appropriate fit here).




More information about the cfe-commits mailing list