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


Groups > comp.lang.c > #67971

Re: the language (and the role of Undefined Behavior therein)

From Keith Thompson <kst-u@mib.org>
Newsgroups comp.lang.c
Subject Re: the language (and the role of Undefined Behavior therein)
Date 2015-08-21 18:34 -0700
Organization None to speak of
Message-ID <lnbne014z3.fsf@kst-u.example.com> (permalink)
References (16 earlier) <75e8b3e2-4171-40bf-9e2d-c3c132272dec@googlegroups.com> <ln1tex3gd3.fsf@kst-u.example.com> <1f86d431-4ab2-447e-830b-5878781225fc@googlegroups.com> <lnsi7d1n7c.fsf@kst-u.example.com> <044f1f29-894c-46c1-9ff2-61ba5191c3f5@googlegroups.com>

Show all headers | View raw


supercat@casperkitty.com writes:
> On Thursday, August 20, 2015 at 6:48:24 PM UTC-5, Keith Thompson wrote:
>> I'm skeptical that such a change was made, but I'm more than willing to
>> be convinced.  Can you cite the added wording in C11 that says this?
>
> Hmm... upon doing some further research, it seems I may have been mistaken.
>
>> > By the mid 1980s, mainstream compilers for mainstream platforms had
>> > pretty well established some de facto boundaries for the behaviors of
>> > some actions where the standard imposed no requirements.  Thus, by the
>> > mid 1990s, programmers faced with the choice of writing nasty code to
>> > avoid overflow, or less-nasty code to limit the effects, would
>> > generally perceive no reason to favor the former unless their code
>> > would need to run on some really obscure hardware.
>> 
>> In the mind 1980s, there was no C standard.
>
> I would say that the 1978 publication of The C Programming Language, by Brian
> W. Kernighan and Dennis M. Ritchie, established a C Standard.  I don't know
> exactly when the new parameter specification form entered mainstream use, but
> it was certainly before the 1989 publication of the ANSI C Standard.  I first
> started programming with Turbo C in early 1988, and nearly all the code I
> ever saw used the new form.

Prototypes were invented in C++ and later added to C.  They were first
*officially* introduced by the 1989 ANSI standard, but they were
undoubtedly implemented and used before that (just because they were *so
much better* than old-style function declarations).  There was also a
tool called "ansi2knr" that would translate C code with prototypes to C
code without prototypes, so you could use prototypes even if your
compiler didn't yet support them.

>> That sounds similar to SFINAE
>>     https://en.wikipedia.org/wiki/Substitution_failure_is_not_an_error
>> but that applies only when a template expansion would cause a
>> compile-time error; undefined behavior is not relevant.
>
> If evaluation of a compile-time constant in the course of a template
> expansion would invoke Undefined Behavior (e.g. -1<<3), the Standard
> mandates that the expansion be regarded as ill-formed, even if the
> compiler's documentation would specify a behavior consistent with
> yielding a constant (e.g. -8).

[...]

>> Certainly optimizers have simply gotten more clever over the years.
>> I'm not aware of any sudden change of the kind you describe.
>
> Historically, most optimizers would perform transformations which would be
> valid under some sort of execution model.
[SNIP]
> The hyper-modern philosophy is different, in that it makes it impossible to
> define or constrain the effects of any sort of UB.  I don't have a firm grasp
> as to when and how the philosophy took hold, but it seems to have been
> sometime around 2009.

The "hyper-modern philosophy" is the one that's been implicit in the C
standard since 1989.  I haven't kept track of developments in optimization
well enough to know how things have changed or when they've changed.
But if your program has potential undefined behavior, I suggest that you
need to fix the program.  If you think that
    int n = INT_MAX;
    n ++;
"should" set n to any particular value, that's not a conclusion that you
can draw from the C standard.

I do agree that compilers should do a better job of diagnosing such
programs, especially when they take advantage of the presence of
undefine behavior to perform "surprising" transformations.  I don't see
the point of catering to such code beyond that.

-- 
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

Re: the language (and the role of Undefined Behavior therein) supercat@casperkitty.com - 2015-08-18 16:19 -0700
  Re: the language (and the role of Undefined Behavior therein) Richard Damon <Richard@Damon-Family.org> - 2015-08-18 21:15 -0400
    Re: the language (and the role of Undefined Behavior therein) supercat@casperkitty.com - 2015-08-19 10:11 -0700
      Re: the language (and the role of Undefined Behavior therein) Ike Naar <ike@iceland.freeshell.org> - 2015-08-19 19:58 +0000
        Re: the language (and the role of Undefined Behavior therein) supercat@casperkitty.com - 2015-08-19 14:09 -0700
      Re: the language (and the role of Undefined Behavior therein) James Kuyper <jameskuyper@verizon.net> - 2015-08-19 16:10 -0400
        Re: the language (and the role of Undefined Behavior therein) supercat@casperkitty.com - 2015-08-19 16:01 -0700
          Re: the language (and the role of Undefined Behavior therein) James Kuyper <jameskuyper@verizon.net> - 2015-08-19 20:23 -0400
            Re: the language (and the role of Undefined Behavior therein) supercat@casperkitty.com - 2015-08-20 10:35 -0700
              Re: the language (and the role of Undefined Behavior therein) Keith Thompson <kst-u@mib.org> - 2015-08-20 12:32 -0700
                Re: the language (and the role of Undefined Behavior therein) supercat@casperkitty.com - 2015-08-20 13:31 -0700
                Re: the language (and the role of Undefined Behavior therein) donalhambra@gmail.com - 2015-08-20 14:23 -0700
                Re: the language (and the role of Undefined Behavior therein) supercat@casperkitty.com - 2015-08-20 16:13 -0700
                Re: the language (and the role of Undefined Behavior therein) Keith Thompson <kst-u@mib.org> - 2015-08-20 17:48 -0700
                Re: the language (and the role of Undefined Behavior therein) supercat@casperkitty.com - 2015-08-21 01:32 -0700
                Re: the language (and the role of Undefined Behavior therein) Keith Thompson <kst-u@mib.org> - 2015-08-21 18:34 -0700
                Re: the language (and the role of Undefined Behavior therein) supercat@casperkitty.com - 2015-08-21 22:11 -0700
                Re: the language (and the role of Undefined Behavior therein) Richard Damon <Richard@Damon-Family.org> - 2015-08-22 09:41 -0400
                Re: the language (and the role of Undefined Behavior therein) glen herrmannsfeldt <gah@ugcs.caltech.edu> - 2015-08-22 16:59 +0000
                Re: the language (and the role of Undefined Behavior therein) James Kuyper <jameskuyper@verizon.net> - 2015-08-22 23:30 -0400
                Re: the language (and the role of Undefined Behavior therein) glen herrmannsfeldt <gah@ugcs.caltech.edu> - 2015-08-24 03:36 +0000
                Re: the language (and the role of Undefined Behavior therein) James Kuyper <jameskuyper@verizon.net> - 2015-08-24 00:25 -0400
                Re: the language (and the role of Undefined Behavior therein) supercat@casperkitty.com - 2015-08-23 22:57 -0700
                Re: the language (and the role of Undefined Behavior therein) glen herrmannsfeldt <gah@ugcs.caltech.edu> - 2015-08-24 19:49 +0000
                Re: the language (and the role of Undefined Behavior therein) Tim Rentsch <txr@alumni.caltech.edu> - 2015-09-06 14:43 -0700
                Re: the language (and the role of Undefined Behavior therein) supercat@casperkitty.com - 2015-08-23 16:27 -0700
                Re: the language (and the role of Undefined Behavior therein) Richard Damon <Richard@Damon-Family.org> - 2015-08-23 21:15 -0400
                Re: the language (and the role of Undefined Behavior therein) supercat@casperkitty.com - 2015-08-23 20:18 -0700
                Re: the language (and the role of Undefined Behavior therein) raltbos@xs4all.nl (Richard Bos) - 2015-08-22 14:37 +0000
                Re: the language (and the role of Undefined Behavior therein) David Kleinecke <dkleinecke@gmail.com> - 2015-08-22 19:12 -0700
                Re: the language (and the role of Undefined Behavior therein) James Kuyper <jameskuyper@verizon.net> - 2015-08-22 23:38 -0400
                Re: the language (and the role of Undefined Behavior therein) David Kleinecke <dkleinecke@gmail.com> - 2015-08-23 20:01 -0700
                Re: the language (and the role of Undefined Behavior therein) Keith Thompson <kst-u@mib.org> - 2015-08-23 21:56 -0700
                Re: the language (and the role of Undefined Behavior therein) David Kleinecke <dkleinecke@gmail.com> - 2015-08-24 17:25 -0700
                Re: the language (and the role of Undefined Behavior therein) Keith Thompson <kst-u@mib.org> - 2015-08-24 18:21 -0700
                Re: the language (and the role of Undefined Behavior therein) James Kuyper <jameskuyper@verizon.net> - 2015-08-24 22:22 -0400
                Re: the language (and the role of Undefined Behavior therein) glen herrmannsfeldt <gah@ugcs.caltech.edu> - 2015-08-25 14:31 +0000
                Re: the language (and the role of Undefined Behavior therein) supercat@casperkitty.com - 2015-08-25 09:22 -0700
                Re: the language (and the role of Undefined Behavior therein) glen herrmannsfeldt <gah@ugcs.caltech.edu> - 2015-08-25 18:55 +0000
                Re: the language (and the role of Undefined Behavior therein) Keith Thompson <kst-u@mib.org> - 2015-08-25 12:33 -0700
                Re: the language (and the role of Undefined Behavior therein) supercat@casperkitty.com - 2015-08-25 16:23 -0700
                Re: the language (and the role of Undefined Behavior therein) James Kuyper <jameskuyper@verizon.net> - 2015-08-24 00:31 -0400
                Re: the language (and the role of Undefined Behavior therein) Keith Thompson <kst-u@mib.org> - 2015-08-24 10:32 -0700
                Re: the language (and the role of Undefined Behavior therein) Malcolm McLean <malcolm.mclean5@btinternet.com> - 2015-08-22 23:54 -0700
                Re: the language (and the role of Undefined Behavior therein) glen herrmannsfeldt <gah@ugcs.caltech.edu> - 2015-08-24 03:45 +0000
                Re: the language (and the role of Undefined Behavior therein) Tim Rentsch <txr@alumni.caltech.edu> - 2015-09-07 08:11 -0700
      Re: the language (and the role of Undefined Behavior therein) Richard Damon <Richard@Damon-Family.org> - 2015-08-23 18:46 -0400
        Re: the language (and the role of Undefined Behavior therein) supercat@casperkitty.com - 2015-08-23 19:04 -0700
          Re: the language (and the role of Undefined Behavior therein) Richard Damon <Richard@Damon-Family.org> - 2015-08-23 23:40 -0400
            Re: the language (and the role of Undefined Behavior therein) supercat@casperkitty.com - 2015-08-23 22:48 -0700
              Re: the language (and the role of Undefined Behavior therein) Malcolm McLean <malcolm.mclean5@btinternet.com> - 2015-08-24 00:38 -0700
  Re: the language (and the role of Undefined Behavior therein) James Kuyper <jameskuyper@verizon.net> - 2015-08-18 21:22 -0400
  Re: the language (and the role of Undefined Behavior therein) Ike Naar <ike@iceland.freeshell.org> - 2015-08-20 21:44 +0000
    Re: the language (and the role of Undefined Behavior therein) supercat@casperkitty.com - 2015-08-20 16:48 -0700
    Re: the language (and the role of Undefined Behavior therein) Philip Lantz <prl@canterey.us> - 2015-08-20 23:41 -0700

csiph-web