Re: Optimisations and undefined behaviour

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 11/09/2015 03:05 PM, Richard Earnshaw wrote:
> On 09/11/15 15:00, Andrew Haley wrote:
>> On 11/09/2015 02:56 PM, Richard Earnshaw wrote:
>>> On 09/11/15 14:29, Andrew Haley wrote:
>>
>>>> Here it is again:
>>>>
>>>> int foo(int x) {
>>>> 	if (x > 1290) {
>>>> 		printf("X is wrong here %d, but we don't care\n", x);
>>>> 	}
>>>> 	return x*x*x;
>>>>
>>>> Here, the printf writes to a stream then the UB happens.  
>>>
>>> Not if setvbuf has been used to make the stream unbuffered.
>>
>> It hasn't.  And I know it hasn't because it's my example.
> 
> A compiler would still need to do whole-program analysis to prove that;
> it can't work on the assumption that it hasn't been done.

I'm not sure about that: see below.

>> And besides, the UB might cause the computer to crash before the
>> data has been written to stdout by the kernel; the same reasoning
>> applies.
> 
> UB that causes the machine to crash is, I think, outside of what we need
> to think about.  Any machine that's falls over in that case is not
> interesting.

Well, in that case you'll have to define what you think we are
supposed to be thinking about.  I don't think you are talking about
the C language as it is specified, you're talking about some
implementation on some machine, and of course I can't argue with you
about what that machine does because I don't know anything about it.
Such a discussion is IMO pointless because everyone can just Make
Stuff Up.

I do know that once UB has happened in a program, the whole program is
undefined and the language specification imposes no requirements on it
at all.  I don't see any language in the specification which requires
prior operations with side effects to have completed.

But should we treat all potential UB as having a side effect,
(essentially treating it like a volatile) so that it cannot be moved
past a sequence point?  I wouldn't have thought so, but perhaps we
could.

Andrew.



[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux