Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.c > #55157

Re: the language

From James Kuyper <jameskuyper@verizon.net>
Newsgroups comp.lang.c
Subject Re: the language
Date 2014-12-20 13:36 -0500
Organization A noiseless patient Spider
Message-ID <m74fij$csc$1@dont-email.me> (permalink)
References (10 earlier) <5yhkw.397413$il4.43434@fx06.am4> <m6sc87$hmj$1@speranza.aioe.org> <ek259a5e27tr5bel88c6o07qah84o349v1@4ax.com> <5492c298.300765@news.xs4all.nl> <ifilw.1128836$yK.904633@fx14.iad>

Show all headers | View raw


On 12/20/2014 12:22 PM, Richard Damon wrote:
> On 12/18/14, 7:04 AM, Richard Bos wrote:
>> Robert Wessel <robertwessel2@yahoo.com> wrote:
>>
>>> In fact there's a lively discussion going on about compilers doing
>>> just that.  Mike Stump (who's a GCC developer) has been arguing here
>>> in c.l.c that compiler *are* allowed to make assumptions based on what
>>> is technically undefined behavior when optimizing code.  A number of
>>> other folks are unhappy with that.
>>
>> They may be unhappy with that, but I can't see what arguments they can
>> bring against it. Undefined behaviour is _undefined_, so if an optimiser
>> wants to make use of it, it's free to do so.
>>
>> Richard
>>
> 
> The C standard NEVER says something like "if you do X then the results 
> are totally undefined", it only says that "if you do X then the results 
> are undefined by this standard". The standard can't grant permission to 
> act against the defined behavior of another standard that has been 
> accepted by the compiler.
> 
> The architecture documents of a machine will often document what the 
> behavior of operations that the C standard leaves undefined, and in fact 
> the reason the standard left them undefined was that, at least at the 
> time the standard was being created, different machines were defining 
> that behavior in wildly different ways, in some case beyond what would 
> make reasonable implementation defined behavior.

The C standard defines the behavior of C language constructs; the
machine's architecture documents document the behavior of machine
language instructions. It's a mistake, and one that's fundamental to
this whole line of argument, to equate the two. Just because a machine
has a shift operation that could be used to implement a C
shift-expression, doesn't mean that a conforming implementation of C
targeting that machine is required to use that particular instruction.
The undefined consequences that could occur when misusing a C shift
instruction are not, therefore, constrained to be the same as they would
be if that machine instruction were used.

It might seem perverse to produce any other result - until you consider
optimizations. A shift expression could be optimized completely out of
the generated code, or it could be combined with another expression, and
the combination might be replaced by a different set of instructions
that is better for some reason. As long as the alternative instructions
have behavior that matches the standard's requirements, when it imposes
some, it doesn't matter what the alternative code does when the behavior
is undefined.

> The question comes, having targeted code to a particular processor, has 
> the implementation taken on the definition of those behaviors from the 
> processor architecture document or not?

It's not required to honor any particular mapping from C code to machine
instructions, as long as the mapping it actually uses produces the same
behavior when the behavior is defined. When the behavior is undefined,
there are no restrictions on the generated code of any kind.

> I don't have a problem with the compiler having a mode where it ignores 
> these definition and optimizes based on ignoring them, and fully using 
> just C's definition of undefined behavior (like fast floating point 
> optimizations can ignore some of the IEEE floating point requirements).
> 
> While I would prefer that "conforming" mode be the default, I understand 
> that there are "market pressures" that might make some non-conformance a 
> default, these options need to be well described in the section on using 
> the compiler in a conforming manner, and changes to this section 
> prominently noted, and not just buried in a long list of optional 
> settings and voluminous change logs.

It's possible for a compiler to conform fully to the C standard, and
generate machine code that conforms fully to the specifications of the
relevant documents, but have the generated machine code NOT be the same
as that which you naively expect. If so, the behavior need not conform
to any assumptions you made based upon that unjustified expectation.

> I would also contend that the implementer is being genuinely and 
> deliberately unhelpful here.

That depends entirely upon whether or not the optimization that produces
unexpected results when the behavior is undefined, has corresponding
benefits when the behavior is defined. If it does have such benefits,
such as increased speed, then it's being helpful, not unhelpful.

> ... At the point where the compiler has 
> determined that it can omit a section of code, it also knows that the 
> programmer has done something questionable, and appears to be depending 
> on undefined behavior, so it should at least, by default, issue a 
> warning here (and perhaps then do the optimization).

It should only do so if the questionable nature of the code is clear;
oftentimes, it is not, as least not from the point of view of the
compiler. It's often easier for a human to notice that some code is
questionable, than it is for the compiler.
-- 
James Kuyper

Back to comp.lang.c | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

the language Rosario193 <Rosario@invalid.invalid> - 2014-11-26 21:54 +0100
  Re: the language Rosario193 <Rosario@invalid.invalid> - 2014-11-26 21:56 +0100
    Re: the language John Bode <jfbode1029@gmail.com> - 2014-11-26 13:45 -0800
      Re: the language Rosario193 <Rosario@invalid.invalid> - 2014-11-28 11:52 +0100
      Re: the language "Bill Cunningham" <nospam@nspam.invalid> - 2014-12-01 23:25 -0500
      Re: the language "Bill Cunningham" <nospam@nspam.invalid> - 2014-12-02 00:56 -0500
        Re: the language Rosario193 <Rosario@invalid.invalid> - 2014-12-04 14:52 +0100
          Re: the language "Osmium" <r124c4u102@comcast.net> - 2014-12-04 08:07 -0600
            Re: the language Geoff <geoff@invalid.invalid> - 2014-12-04 10:20 -0800
  Re: the language Mark Storkamp <mstorkamp@yahoo.com> - 2014-11-26 15:11 -0600
    Re: the language Rosario193 <Rosario@invalid.invalid> - 2014-11-28 12:16 +0100
      Re: the language Rosario193 <Rosario@invalid.invalid> - 2014-11-28 12:18 +0100
  Re: the language John Bode <jfbode1029@gmail.com> - 2014-11-26 13:12 -0800
    Re: the language Kaz Kylheku <kaz@kylheku.com> - 2014-11-27 00:37 +0000
    Re: the language Ben Bacarisse <ben.usenet@bsb.me.uk> - 2014-11-27 01:13 +0000
  Re: the language raltbos@xs4all.nl (Richard Bos) - 2014-11-26 22:45 +0000
    Re: the language Rosario193 <Rosario@invalid.invalid> - 2014-11-27 07:41 +0100
  Re: the language Rosario193 <Rosario@invalid.invalid> - 2014-11-27 08:12 +0100
    Re: the language Morris Dovey <mrdovey@iedu.com> - 2014-11-27 01:43 -0600
      Re: the language Rosario193 <Rosario@invalid.invalid> - 2014-11-28 11:56 +0100
        Re: the language Morris Dovey <mrdovey@iedu.com> - 2014-11-28 09:08 -0600
          Re: the language Rosario193 <Rosario@invalid.invalid> - 2014-11-28 20:58 +0100
            Re: the language Morris Dovey <mrdovey@iedu.com> - 2014-11-28 19:22 -0600
              Re: the language Rosario193 <Rosario@invalid.invalid> - 2014-12-02 02:59 +0100
                Re: the language Kaz Kylheku <kaz@kylheku.com> - 2014-12-02 02:53 +0000
                Re: the language Les Cargill <lcargill99@comcast.com> - 2014-12-01 21:25 -0600
                Re: the language Kaz Kylheku <kaz@kylheku.com> - 2014-12-02 06:22 +0000
  Re: the language Richard Heathfield <invalid@see.sig.invalid> - 2014-11-27 08:37 +0000
    Re: the language Reinhardt Behm <rbehm@hushmail.com> - 2014-11-27 16:44 +0800
      Re: the language gazelle@shell.xmission.com (Kenny McCormack) - 2014-11-27 15:35 +0000
        Re: the language Richard Damon <Richard@Damon-Family.org> - 2014-11-27 11:58 -0500
          Re: the language jt@toerring.de (Jens Thoms Toerring) - 2014-11-27 22:44 +0000
            Re: the language Rosario193 <Rosario@invalid.invalid> - 2014-11-28 09:52 +0100
            Re: the language Tim Rentsch <txr@alumni.caltech.edu> - 2014-11-28 12:53 -0800
          Re: the language Thomas Jahns <jahns@idontlikespam.dkrz.de> - 2014-11-28 10:07 +0100
            Re: the language Thomas Jahns <jahns@idontlikespam.dkrz.de> - 2014-11-28 14:57 +0100
            Re: the language Tim Rentsch <txr@alumni.caltech.edu> - 2014-11-28 13:09 -0800
    Re: the language Rosario193 <Rosario@invalid.invalid> - 2014-11-28 12:01 +0100
      Re: the language Richard Heathfield <invalid@see.sig.invalid> - 2014-11-28 14:46 +0000
    Re: the language Tim Rentsch <txr@alumni.caltech.edu> - 2014-11-28 13:16 -0800
      Re: the language gazelle@shell.xmission.com (Kenny McCormack) - 2014-11-28 22:09 +0000
        Re: the language Tim Rentsch <txr@alumni.caltech.edu> - 2014-12-01 03:40 -0800
      Re: the language Malcolm McLean <malcolm.mclean5@btinternet.com> - 2014-11-28 14:42 -0800
        Re: the language Tim Rentsch <txr@alumni.caltech.edu> - 2014-12-01 03:22 -0800
      Re: the language Richard Heathfield <invalid@see.sig.invalid> - 2014-11-28 23:09 +0000
        Re: the language Malcolm McLean <malcolm.mclean5@btinternet.com> - 2014-11-28 16:14 -0800
          Re: the language BartC <bc@freeuk.com> - 2014-11-29 01:42 +0000
          Re: the language Kaz Kylheku <kaz@kylheku.com> - 2014-11-29 01:42 +0000
            Re: the language Malcolm McLean <malcolm.mclean5@btinternet.com> - 2014-11-29 04:03 -0800
          Re: the language Keith Thompson <kst-u@mib.org> - 2014-12-01 00:55 -0800
            Re: the language glen herrmannsfeldt <gah@ugcs.caltech.edu> - 2014-12-02 05:42 +0000
        Re: the language Richard Damon <Richard@Damon-Family.org> - 2014-11-28 19:25 -0500
        Re: the language Tim Rentsch <txr@alumni.caltech.edu> - 2014-12-01 03:21 -0800
          Re: the language Richard Heathfield <invalid@see.sig.invalid> - 2014-12-01 14:02 +0000
            Re: the language Tim Rentsch <txr@alumni.caltech.edu> - 2014-12-05 10:18 -0800
              Re: the language Richard Heathfield <invalid@see.sig.invalid> - 2014-12-07 08:25 +0000
                Re: the language Öö Tiib <ootiib@hot.ee> - 2014-12-07 10:44 -0800
                Re: the language Richard Heathfield <invalid@see.sig.invalid> - 2014-12-07 19:17 +0000
                Re: the language Öö Tiib <ootiib@hot.ee> - 2014-12-07 15:48 -0800
                Re: the language Richard Heathfield <invalid@see.sig.invalid> - 2014-12-08 05:45 +0000
                Re: the language Malcolm McLean <malcolm.mclean5@btinternet.com> - 2014-12-08 03:27 -0800
                Re: the language Kaz Kylheku <kaz@kylheku.com> - 2014-12-08 06:00 +0000
                Re: the language Richard Heathfield <invalid@see.sig.invalid> - 2014-12-08 06:17 +0000
                Re: the language Malcolm McLean <malcolm.mclean5@btinternet.com> - 2014-12-08 03:37 -0800
                Re: the language Richard Heathfield <invalid@see.sig.invalid> - 2014-12-08 12:53 +0000
                Re: the language Tim Rentsch <txr@alumni.caltech.edu> - 2014-12-16 04:21 -0800
                Re: the language Richard Heathfield <invalid@see.sig.invalid> - 2014-12-16 12:43 +0000
                Re: the language Tim Rentsch <txr@alumni.caltech.edu> - 2014-12-16 14:46 -0800
                Re: the language Richard Heathfield <invalid@see.sig.invalid> - 2014-12-17 00:23 +0000
                Re: the language JohnF <john@please.see.sig.for.email.com> - 2014-12-17 07:01 +0000
                Re: the language Richard Heathfield <invalid@see.sig.invalid> - 2014-12-17 07:22 +0000
                Re: the language Ben Bacarisse <ben.usenet@bsb.me.uk> - 2014-12-17 11:56 +0000
                Re: the language Malcolm McLean <malcolm.mclean5@btinternet.com> - 2014-12-17 05:43 -0800
                Re: the language Rosario193 <Rosario@invalid.invalid> - 2014-12-18 18:30 +0100
                Re: the language Rosario193 <Rosario@invalid.invalid> - 2014-12-18 18:41 +0100
                Re: the language Richard Heathfield <invalid@see.sig.invalid> - 2014-12-17 14:34 +0000
                Re: the language Ben Bacarisse <ben.usenet@bsb.me.uk> - 2014-12-18 02:15 +0000
                Re: the language James Kuyper <jameskuyper@verizon.net> - 2014-12-17 22:31 -0500
                Re: the language Ben Bacarisse <ben.usenet@bsb.me.uk> - 2014-12-18 17:19 +0000
                Re: the language Richard Heathfield <invalid@see.sig.invalid> - 2014-12-18 07:52 +0000
                Re: the language Ben Bacarisse <ben.usenet@bsb.me.uk> - 2014-12-18 17:21 +0000
                Re: the language Richard Heathfield <invalid@see.sig.invalid> - 2014-12-18 18:15 +0000
                Re: the language Ben Bacarisse <ben.usenet@bsb.me.uk> - 2014-12-19 01:20 +0000
                Re: the language Richard Heathfield <invalid@see.sig.invalid> - 2014-12-19 07:48 +0000
                Re: the language James Kuyper <jameskuyper@verizon.net> - 2014-12-19 07:40 -0500
                Re: the language Richard Heathfield <invalid@see.sig.invalid> - 2014-12-19 12:54 +0000
                Re: the language James Kuyper <jameskuyper@verizon.net> - 2014-12-19 09:54 -0500
                Re: the language Richard Heathfield <invalid@see.sig.invalid> - 2014-12-19 15:19 +0000
                Re: the language James Kuyper <jameskuyper@verizon.net> - 2014-12-19 11:00 -0500
                Re: the language Richard Heathfield <invalid@see.sig.invalid> - 2014-12-19 16:13 +0000
                Re: the language James Kuyper <jameskuyper@verizon.net> - 2014-12-19 11:27 -0500
                Re: the language Richard Heathfield <invalid@see.sig.invalid> - 2014-12-19 16:45 +0000
                Re: the language James Kuyper <jameskuyper@verizon.net> - 2014-12-19 13:48 -0500
                Re: the language Richard Heathfield <invalid@see.sig.invalid> - 2014-12-19 19:10 +0000
                Re: the language Morris Dovey <mrdovey@iedu.com> - 2014-12-19 21:17 -0600
                Re: the language Morris Dovey <mrdovey@iedu.com> - 2014-12-19 21:32 -0600
                Re: the language Ben Bacarisse <ben.usenet@bsb.me.uk> - 2014-12-19 16:49 +0000
                Re: the language Richard Heathfield <invalid@see.sig.invalid> - 2014-12-19 17:00 +0000
                Re: the language James Kuyper <jameskuyper@verizon.net> - 2014-12-19 13:57 -0500
                Re: the language Malcolm McLean <malcolm.mclean5@btinternet.com> - 2014-12-19 14:31 -0800
                Re: the language Ben Bacarisse <ben.usenet@bsb.me.uk> - 2014-12-19 20:29 +0000
                Re: the language Richard Heathfield <invalid@see.sig.invalid> - 2014-12-19 20:36 +0000
                Re: the language Tim Rentsch <txr@alumni.caltech.edu> - 2014-12-17 07:18 -0800
                Re: the language Richard Heathfield <invalid@see.sig.invalid> - 2014-12-17 15:45 +0000
                Re: the language glen herrmannsfeldt <gah@ugcs.caltech.edu> - 2014-12-17 16:50 +0000
                Re: the language raltbos@xs4all.nl (Richard Bos) - 2014-12-17 17:24 +0000
                Re: the language Robert Wessel <robertwessel2@yahoo.com> - 2014-12-18 02:07 -0600
                Re: the language raltbos@xs4all.nl (Richard Bos) - 2014-12-18 12:04 +0000
                Re: the language Richard Damon <Richard@Damon-Family.org> - 2014-12-18 08:06 -0500
                Re: the language James Kuyper <jameskuyper@verizon.net> - 2014-12-18 08:30 -0500
                Re: the language Richard Damon <Richard@Damon-Family.org> - 2014-12-19 00:11 -0500
                Re: the language glen herrmannsfeldt <gah@ugcs.caltech.edu> - 2014-12-19 07:00 +0000
                Re: the language Keith Thompson <kst-u@mib.org> - 2014-12-19 08:43 -0800
                Re: the language Richard Damon <Richard@Damon-Family.org> - 2014-12-19 23:29 -0500
                Re: the language Keith Thompson <kst-u@mib.org> - 2014-12-20 00:37 -0800
                Re: the language gazelle@shell.xmission.com (Kenny McCormack) - 2014-12-20 08:45 +0000
                Re: the language raltbos@xs4all.nl (Richard Bos) - 2014-12-20 09:45 +0000
                Re: the language Malcolm McLean <malcolm.mclean5@btinternet.com> - 2014-12-20 03:17 -0800
                Re: the language Malcolm McLean <malcolm.mclean5@btinternet.com> - 2014-12-18 06:09 -0800
                Re: the language raltbos@xs4all.nl (Richard Bos) - 2014-12-18 14:30 +0000
                Re: the language raltbos@xs4all.nl (Richard Bos) - 2014-12-18 14:23 +0000
                Re: the language Keith Thompson <kst-u@mib.org> - 2014-12-18 08:18 -0800
                Re: the language Richard Damon <Richard@Damon-Family.org> - 2014-12-20 12:22 -0500
                Re: the language James Kuyper <jameskuyper@verizon.net> - 2014-12-20 13:36 -0500
                Re: the language Keith Thompson <kst-u@mib.org> - 2014-12-20 11:43 -0800
                Re: the language Keith Thompson <kst-u@mib.org> - 2014-12-20 11:37 -0800
                Re: the language glen herrmannsfeldt <gah@ugcs.caltech.edu> - 2014-12-20 20:10 +0000
                Re: the language Robert Wessel <robertwessel2@yahoo.com> - 2014-12-21 15:02 -0600
                Re: the language Kaz Kylheku <kaz@kylheku.com> - 2014-12-21 22:02 +0000
                Re: the language Stephen Sprunk <stephen@sprunk.org> - 2014-12-21 23:49 -0600
                Re: the language raltbos@xs4all.nl (Richard Bos) - 2014-12-21 17:45 +0000
                Re: the language Tim Rentsch <txr@alumni.caltech.edu> - 2014-12-18 10:29 -0800
                Re: the language Robert Wessel <robertwessel2@yahoo.com> - 2014-12-20 05:29 -0600
                Re: the language Tim Rentsch <txr@alumni.caltech.edu> - 2014-12-20 11:32 -0800
                Re: the language Robert Wessel <robertwessel2@yahoo.com> - 2014-12-21 15:23 -0600
                Re: the language Tim Rentsch <txr@alumni.caltech.edu> - 2014-12-22 23:39 -0800
                Re: the language glen herrmannsfeldt <gah@ugcs.caltech.edu> - 2014-12-20 20:22 +0000
                Re: the language Tim Rentsch <txr@alumni.caltech.edu> - 2014-12-18 10:24 -0800
                Re: the language Richard Heathfield <invalid@see.sig.invalid> - 2014-12-18 18:36 +0000
                Re: the language Tim Rentsch <txr@alumni.caltech.edu> - 2014-12-19 09:24 -0800
                Re: the language Richard Heathfield <invalid@see.sig.invalid> - 2014-12-19 17:53 +0000
                Re: the language Tim Rentsch <txr@alumni.caltech.edu> - 2014-12-20 11:48 -0800
                Re: the language JohnF <john@please.see.sig.for.email.com> - 2014-12-19 02:20 +0000
                Re: the language Richard Heathfield <invalid@see.sig.invalid> - 2014-12-19 08:31 +0000
                Re: the language JohnF <john@please.see.sig.for.email.com> - 2014-12-19 09:31 +0000
                Re: the language Richard Heathfield <invalid@see.sig.invalid> - 2014-12-19 10:10 +0000
                Re: the language Malcolm McLean <malcolm.mclean5@btinternet.com> - 2014-12-19 07:08 -0800
                Re: the language JohnF <john@please.see.sig.for.email.com> - 2014-12-20 06:39 +0000
                Re: the language John Forkosh <forkosh@panix.com> - 2014-12-20 07:32 +0000
                Re: the language Greg Martin <greg.at.softsprocket@dot.com> - 2015-01-04 17:02 +0000
                Re: the language James Kuyper <jameskuyper@verizon.net> - 2015-01-04 12:40 -0500
                Re: the language Greg Martin <greg.at.softsprocket@dot.com> - 2015-01-04 18:02 +0000
                Re: the language James Kuyper <jameskuyper@verizon.net> - 2015-01-05 09:47 -0500
                Re: the language Greg Martin <greg.at.softsprocket@dot.com> - 2015-01-05 15:14 +0000
                Re: the language Keith Thompson <kst-u@mib.org> - 2015-01-05 08:42 -0800
                Re: the language glen herrmannsfeldt <gah@ugcs.caltech.edu> - 2015-01-06 00:14 +0000
                Re: the language James Kuyper <jameskuyper@verizon.net> - 2015-01-05 13:19 -0500
                Re: the language Richard Damon <Richard@Damon-Family.org> - 2015-01-04 15:59 -0500
                Re: the language Keith Thompson <kst-u@mib.org> - 2015-01-04 14:30 -0800
                Re: the language Malcolm McLean <malcolm.mclean5@btinternet.com> - 2015-01-04 15:44 -0800
                Re: the language James Kuyper <jameskuyper@verizon.net> - 2015-01-05 13:36 -0500
  Re: the language Rosario193 <Rosario@invalid.invalid> - 2014-11-28 12:07 +0100
  Re: the language "ocq (an evil corporate man)" <ocq@maili.ng> - 2014-12-02 23:16 +0100
    Re: the language Malcolm McLean <malcolm.mclean5@btinternet.com> - 2014-12-03 02:23 -0800
      Re: the language "ocq (an evil corporate man)" <ocq@maili.ng> - 2014-12-03 15:55 +0100
      Re: the language Nobody <nobody@nowhere.invalid> - 2014-12-03 15:42 +0000
        Re: the language Malcolm McLean <malcolm.mclean5@btinternet.com> - 2014-12-04 04:49 -0800
          Re: the language Keith Thompson <kst-u@mib.org> - 2014-12-04 09:07 -0800
            Re: the language Malcolm McLean <malcolm.mclean5@btinternet.com> - 2014-12-04 10:08 -0800
              Re: the language Keith Thompson <kst-u@mib.org> - 2014-12-04 11:49 -0800
                Re: the language Rosario193 <Rosario@invalid.invalid> - 2014-12-05 12:32 +0100
          Re: the language raltbos@xs4all.nl (Richard Bos) - 2014-12-04 22:17 +0000
  Re: the language Rosario193 <Rosario@invalid.invalid> - 2014-12-18 18:17 +0100
    Re: the language Richard Heathfield <invalid@see.sig.invalid> - 2014-12-18 18:12 +0000
      Re: the language Rosario193 <Rosario@invalid.invalid> - 2014-12-18 23:15 +0100
        Re: the language Rosario193 <Rosario@invalid.invalid> - 2014-12-18 23:50 +0100
    Re: the language "ocq (an evil corporate man)" <ocq@maili.ng> - 2014-12-19 02:34 +0100

csiph-web