On Feb 10, 2012, at 1:27 PM, Vasiliy Korchagin wrote:
> On 11.02.2012 00:16, David Blaikie wrote:
>> 2012/2/10 Vasiliy Korchagin<[email protected]>:
>>> On 10.02.2012 19:45, David Blaikie wrote:
>>>> 2012/2/9 Vasiliy Korchagin<[email protected]>:
>>>>> On 08.02.2012 23:47, David Blaikie wrote:
>>>>> 
>>>>> On Wed, Feb 8, 2012 at 11:25 AM, Chris Lattner<[email protected]>
>>>>>  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<[email protected]>
>>>>>  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).
> According to C99 5.1.2.2.3 Clang allows main() to implicitly return 0. 
> ReturnValue variable in CodeGenFunction should not be null to hold the return 
> value. If changes in codegen are removed Clang crashes trying to create 
> implicit return.

The appropriate fix here is for Sema to not set the hasImplicitReturnZero() bit.

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

Reply via email to