http://gcc.gnu.org/bugzilla/show_bug.cgi?id=34678
--- Comment #25 from Nick Maclaren <nmm1 at cam dot ac.uk> --- On Jan 10 2014, vincent-gcc at vinc17 dot net wrote: > >http://gcc.gnu.org/bugzilla/show_bug.cgi?id=34678 > >--- Comment #24 from Vincent Lefèvre <vincent-gcc at vinc17 dot net> - > >(In reply to Nick Maclaren from comment #23) > >> If __STDC_IEC_559__ is unset or does not have the value 1, setting >> STDC FENV_ACCESS to "on" is undefined behaviour (see 6.10.8.3, 7.6 and >> Annex F), unless the implementation explicitly chooses to extend the >> language to support it. > >You're wrong. The C standard doesn't say that. I am sorry, but it is you that is wrong. >6.10.8.3 says: "__STDC_IEC_559__ The integer constant 1, intended to indica >te >conformance to the specifications in annex F (IEC 60559 floating-point >arithmetic)." and nothing about STDC FENV_ACCESS. 3.4.3 says: undefined behavior behavior, upon use of a nonportable or erroneous program construct or of erroneous data, for which this International Standard imposes no requirements 4. Conformance, paragraph 2, says: ... Undefined behavior is otherwise indicated in this International Standard by the words "undefined behavior" or by the omission of any explicit definition of behavior. There is no difference in emphasis among these three; they all describe "behavior that is undefined". What "explicit definition of behavior" is there for the case when STDC FENV_ACCESS is set to "on" but __STDC_IEC_559__ is not set to one? As there is none, it is undefined behaviour. gcc can therefore do whatever it likes. Regards, Nick Maclaren.