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


Groups > comp.lang.c > #55084

Re: the language

From Keith Thompson <kst-u@mib.org>
Newsgroups comp.lang.c
Subject Re: the language
Date 2014-12-19 08:43 -0800
Organization None to speak of
Message-ID <lnppbfbneg.fsf@nuthaus.mib.org> (permalink)
References (12 earlier) <ek259a5e27tr5bel88c6o07qah84o349v1@4ax.com> <5492c298.300765@news.xs4all.nl> <LjAkw.152595$Sn4.106292@fx10.iad> <m6uksd$7t3$1@dont-email.me> <rsOkw.818947$DX.276445@fx06.iad>

Show all headers | View raw


Richard Damon <Richard@Damon-Family.org> writes:
[...]
> Note, I didn't say "Mandated", but defined how that machine performed 
> certain operations.
>
> Take almost ANY normal 2's complement machine (like x86)
>
> int i = INT_MAX;
> int j = 1;
> int k = i+j;
>
> Under the assumption that + means use the processors addition 
> instruction, and not some horrible concoction that acts like the 
> addition instruction most of the time, but in certain conditions defined 
> by the standard, because there have at one time existed that did 
> something diffent, the the only reasonable value for k int INT_MIN.

And that assumption is where you go astray.  There is no
requirement, or even a vague implication, in the C standard that
the C "+" operator maps to any particular hardware instruction.
The target system might not even *have* an addition instruction --
implausible for int, but quite possible for some extended integer
or floating-point type.

C code does not specify CPU instructions.  It specifies behavior.
CPU instructions are a tool used by the compiler to implement that
behavior.  And in this case, neither the C standard nor this C code
specifies even the behavior of the "+" operator when the operands
have the values INT_MAX and 1.

A benign example:

    int i = 2;
    int j = 3;
    printf("%d\n", i + j);

A decent optimizing compiler will not generate an ADD instruction to
compute the value of i + j.  Instead, it will generate code equivalent
to printf("%d\n", 5), or even puts("5"), because it's able to prove that
that has the same behavior.

> The hardware definition has defined that the way arithmetic works on 
> this machine is a benign wrap around. The compiler, in exploiting that 
> the formal definition in C doesn't require the program to use the 
> defined capabilities of the machine has inserts many landmines into the 
> program design. It has gone out of its way to do something (technically 
> allowed, but largely unexpected) surprising and counter intuitive.
>
> By the same logic, the compiler is allowed to insert code into a program 
> so if ever the program does something undefined (like compute INT_MAX+1) 
> it automatically emails the contents of the users computer to their 
> competitor and then reformat the hard disk.

Compilers do not go out of their way to exploit undefined behavior for
the sake of generating surprising results.  (Well, one could, but I
doubt that any actually do so.)

An optimizing compiler analyzes C code and its own generated
intermediate code in great detail, rearranging it for better
performance.  This analysis and rearrangement are constrained by the
required behavior of the code as defined by the standard.  The goal is
to maximize performance for code whose behavior is defined.

As a side effect, the analysis might reveal that a particular chunk of
code has undefined behavior, and compilers often warn about that (which
is why, in some cases, you can get better warnings by compiling with
optimization enabled).

[...]

> Yes, C doesn't require that the compiler "do the expected thing" in the 
> face of undefined behavior. I would contend that the fact the compiler 
> goes out of its way to detect that the only way a path can happen is the 
> result of undefined behavior and using that fact quietly optimize it 
> away indicates that creating correct programs is not high on the list of 
> results. The fact that the compiler has detected a path that can only be 
> executed after undefined behavior says that the compiler should have 
> warned of the case, as it is almost certainly a bug in the code.

In some cases, a compiler can generate code that behaves differently in
the presence of undefined behavior even if it doesn't *know* that the
behavior is necessarily undefined.

A hypothetical example:

    char arr[16];
    int i = some_value();
    arr[i] = '?';

Suppose the target CPU has an addressing mode that makes offsets smaller
than 16 bytes more efficient.  If i is in the range 0..15, then using
that addressing mode will result in better code with the same behavior.
If i is outside that range, then that mode (which we'll assume ignores
all but the low-order 4 bits) will clobber some element of arr *instead
of* clobbering some byte outside arr.  The compiler might not have been
able to determine whether the run-time value of i is in the range 0..15
or not, so it has no basis for printing a warning.

Small optimizations like this add up, and are why code compiled with
"-O3" (or equivalent) can be substantially faster than the same code
compiled with "-O0".

-- 
Keith Thompson (The_Other_Keith) kst-u@mib.org  <http://www.ghoti.net/~kst>
Working, but not speaking, for JetHead Development, Inc.
"We must do something.  This is something.  Therefore, we must do this."
    -- Antony Jay and Jonathan Lynn, "Yes Minister"

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