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


Groups > comp.lang.c > #162814

Re: C23 (C2x) changes

From David Brown <david.brown@hesbynett.no>
Newsgroups comp.lang.c
Subject Re: C23 (C2x) changes
Date 2021-09-22 14:21 +0200
Organization A noiseless patient Spider
Message-ID <sif758$rd8$1@dont-email.me> (permalink)
References (7 earlier) <siaufp$mhq$1@dont-email.me> <sicvbp$m4m$1@dont-email.me> <sid3cs$ls5$1@dont-email.me> <sietha$or3$1@dont-email.me> <sif23j$nho$1@dont-email.me>

Show all headers | View raw


On 22/09/2021 12:55, Bart wrote:
> On 22/09/2021 10:37, David Brown wrote:
>> On 21/09/2021 19:05, Bart wrote:
>>> On 21/09/2021 16:56, David Brown wrote:
>>>> On 20/09/2021 23:29, Bart wrote:
>>>>> On 20/09/2021 21:59, David Brown wrote:
>>>
>>>>> Except no compiler seems to do that (of the 7 I tried on Windows)
>>>>> except
>>>>> gcc. So is this just for the benefit of one or two compilers?
>>>>>
>>>>
>>>> There are perhaps half a dozen serious C compilers that have Windows
>>>> versions, and a few more that are *nix only.  gcc, clang, MSVC, icc are
>>>> the main ones.
>>>
>>> clang and MSVC failed to do that optimisation. (I think icc did, but
>>> only on godbolt.) Plus four other compilers.
>>>
>>
>> It doesn't matter what particular optimisations or output you get from
>> code that does not have defined behaviour.  It might happen to do
>> exactly what you expect (whatever that might be), or something entirely
>> different.
>>
>> The point is that you cannot take a simple example like that and
>> extrapolate from it that "most" C compilers have wrapping signed
>> integers or don't do a particular optimisation.   That is pure nonsense.
> 
> I would MUCH rather that all compilers had consistent behaviour. I WANT
> those last two lines of my example to be different - guaranteed. Only
> gcc (and maybe icc) are the exceptions.

I understand that's what you want - although I still can't understand
/why/ such things are important to you.  It's like telling people that
you once ran across the road, got knocked down, and broke your left leg
- and now you want traffic regulations and car driving to be changed to
ensure that every time you run across the road, you /always/ get knocked
down and /always/ break your left leg.  It is simply bizarre to me - the
language rules say "don't let your signed integer arithmetic overflow",
so don't do that - and don't expect any particular given result if /you/
choose to do something stupid.


> 
>> If you want wrapping signed integers, stick to a compiler that
>> /documents/ it supports them.  MSVC is not such a compiler, nor are
>> clang, gcc or icc.  Both gcc and clang (and maybe also icc, I haven't
>> checked) support a "-fwrapv" flag to give you a mode that /does/ wrap
>> signed integers.
> 
> Why? What practical use is that, since you postulate that there is none?
> 

/I/ don't see a good reason for using it.  But other people /do/
sometimes write code that relies on wrapping overflow.  Ironically, one
of the common uses is for determining if there was an overflow.  To me,
that's like jumping off a wall without looking and judging its height by
the injuries you get - which you expect to be consistent.  I'd prefer to
look first, and only jump if it is safe.  But /if/ you have a compiler
that /guarantees/ wrapping behaviour, then of course it is valid to rely
on it in code for that particular compiler.

> 
>>> If your code is compiled by someone else, then you don't know what
>>> compiler they will use and which options.
>>
>> That means it is usually a good idea to write code that has defined
>> behaviour according to the C standard,
> 
> You mean according to tables like this, which tells you if a result is
> signed or unsigned:
> 
>        u8  u16 u32 u64  i8  i16 i32 i64
> 
>    u8   S   S   U   U    S   S   S   S
>   u16   S   S   U   U    S   S   S   S
>   u32   U   U   U   U    U   U   U   S
>   u64   U   U   U   U    U   U   U   U
> 
>    i8   S   S   U   U    S   S   S   S
>   i16   S   S   U   U    S   S   S   S
>   i32   S   S   U   U    S   S   S   S
>   i64   S   S   S   U    S   S   S   S
> 

You use whatever types, operations and rules are defined by the
language.  And if you personally don't like the rules for particular
combinations, don't write code that uses those combinations.  (I avoid
mixing signed and unsigned types in expressions, baring a few simple cases.)

Really, the main thing is not whether you like the complete set of rules
for a language or not - but that you know what they are, and write code
that follows them.

The most insane option is to learn the rules of the language, realise
that your own preferences are for slightly different rules, and then
write code in the language as though it were your own rules that applied.


> Actually I do do something like that in my latest attempt at a C
> backend, but it only uses 2 of those 64 combinations (u64/u64 or
> i64/i64). It generates this code for 'a:=b+c':
> 
>     u64 S1, S2;
>     i64 a;
>     i64 b;
>     i64 c;
>     S1 = b;
>     S2 = c;
>     *(i64*)&S1 += (i64)S2;
>     a = S1;
> 
> Lovely.

And silly.

If you have two 64-bit signed integers "b" and "c", and want to add them
with guaranteed two's complement wrapping on a "normal" system (i.e.,
not some ones' complement dinosaur or a 24-bit DSP with saturating
arithmetic, or anything odd) then the code you want is a support function:

static inline int64_t _add_64(int64_t x, int64_t y) {
	return (uint64_t) x + (uint64_t) y;
}

Then the code to generate for "a := b + c" is :

	a = _add_64(b, c);


But that would be too easy - making it overly complicated is better for
your martyr complex.
	

> 
>>> The practical use is not having to care. Usually the numbers will sort
>>> themselves out in the same way they do for unsigned.
>>>
>>
>> Right - no practical uses that you can describe.
> 
> Well, look at evaluating -(-a)) when a has type int64 and has the value
> int64.min.
> 

Why look at that?  When would that ever occur in real practical code?

> 
> You shouldn't have to keep looking over your shoulder at the compiler
> and trying to double-guess what /it/ might end up doing.
> 

I don't keep guessing and worrying - only /you/ seem to do that.  I
write code that makes sense, and my arithmetic does not overflow.  I
never guess (or care) what the compiler might do when faced with signed
overflows or other undefined behaviour - I don't write code with
undefined behaviour.

(Well, except for bugs in my code - I don't get everything right first
time!  But if the mistakes result in undefined behaviour rather than
meaningless but defined behaviour, then I have a better chance of the
mistakes being found automatically by my tools rather than during
lengthy testing and debugging.)

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


Thread

C23 (C2x) changes Mehdi Amini <atorrses@gmail.com> - 2021-09-20 10:54 +0430
  Re: C23 (C2x) changes David Brown <david.brown@hesbynett.no> - 2021-09-20 09:35 +0200
    Re: C23 (C2x) changes Mehdi Amini <atorrses@gmail.com> - 2021-09-21 11:01 +0430
  Re: C23 (C2x) changes John Bode <jfbode1029@gmail.com> - 2021-09-20 10:41 -0500
    Re: C23 (C2x) changes David Brown <david.brown@hesbynett.no> - 2021-09-20 18:17 +0200
      Re: C23 (C2x) changes Bart <bc@freeuk.com> - 2021-09-20 18:55 +0100
        Re: C23 (C2x) changes scott@slp53.sl.home (Scott Lurndal) - 2021-09-20 18:21 +0000
        Re: C23 (C2x) changes David Brown <david.brown@hesbynett.no> - 2021-09-20 21:39 +0200
          Re: C23 (C2x) changes Bart <bc@freeuk.com> - 2021-09-20 21:07 +0100
            Re: C23 (C2x) changes David Brown <david.brown@hesbynett.no> - 2021-09-20 22:59 +0200
              Re: C23 (C2x) changes Bart <bc@freeuk.com> - 2021-09-20 22:29 +0100
                Re: C23 (C2x) changes Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2021-09-20 17:43 -0700
                Re: C23 (C2x) changes David Brown <david.brown@hesbynett.no> - 2021-09-21 17:56 +0200
                Re: C23 (C2x) changes Bart <bc@freeuk.com> - 2021-09-21 18:05 +0100
                Re: C23 (C2x) changes Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2021-09-21 11:42 -0700
                Re: C23 (C2x) changes David Brown <david.brown@hesbynett.no> - 2021-09-22 11:37 +0200
                Re: C23 (C2x) changes Bart <bc@freeuk.com> - 2021-09-22 11:55 +0100
                Re: C23 (C2x) changes David Brown <david.brown@hesbynett.no> - 2021-09-22 14:21 +0200
                Re: C23 (C2x) changes Bart <bc@freeuk.com> - 2021-09-22 13:58 +0100
                Re: C23 (C2x) changes Ian Pilcher <arequipeno@gmail.com> - 2021-09-22 12:02 -0500
                Re: C23 (C2x) changes scott@slp53.sl.home (Scott Lurndal) - 2021-09-22 17:19 +0000
          Re: C23 (C2x) changes Bart <bc@freeuk.com> - 2021-09-20 23:05 +0100
            Re: C23 (C2x) changes scott@slp53.sl.home (Scott Lurndal) - 2021-09-20 22:47 +0000
              Re: C23 (C2x) changes Lew Pitcher <lew.pitcher@digitalfreehold.ca> - 2021-09-20 22:58 +0000
              Re: C23 (C2x) changes Tim Rentsch <tr.17687@z991.linuxsc.com> - 2021-10-02 07:16 -0700
                Re: C23 (C2x) changes Branimir Maksimovic <branimir.maksimovic@icloud.com> - 2021-10-02 15:15 +0000
            Re: C23 (C2x) changes Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2021-09-20 17:45 -0700
        Re: C23 (C2x) changes Manfred <noname@add.invalid> - 2021-09-27 17:15 +0200
          Re: C23 (C2x) changes Ben Bacarisse <ben.usenet@bsb.me.uk> - 2021-09-27 17:38 +0100
            Re: C23 (C2x) changes Manfred <noname@add.invalid> - 2021-09-27 23:18 +0200
              Re: C23 (C2x) changes antispam@math.uni.wroc.pl - 2021-09-28 13:53 +0000
              Re: C23 (C2x) changes Tim Rentsch <tr.17687@z991.linuxsc.com> - 2021-10-02 08:07 -0700
                Re: C23 (C2x) changes Branimir Maksimovic <branimir.maksimovic@icloud.com> - 2021-10-02 15:18 +0000
                Re: C23 (C2x) changes Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2021-10-02 15:04 -0700
                Re: C23 (C2x) changes Branimir Maksimovic <branimir.maksimovic@icloud.com> - 2021-10-03 01:58 +0000
                Re: C23 (C2x) changes Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2021-10-02 22:06 -0700
                Re: C23 (C2x) changes Branimir Maksimovic <branimir.maksimovic@icloud.com> - 2021-10-03 10:43 +0000
                Re: C23 (C2x) changes Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2021-10-03 13:30 -0700
                Re: C23 (C2x) changes Branimir Maksimovic <branimir.maksimovic@icloud.com> - 2021-10-04 05:04 +0000
                Re: C23 (C2x) changes Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2021-10-03 23:24 -0700
                Re: C23 (C2x) changes Branimir Maksimovic <branimir.maksimovic@icloud.com> - 2021-10-04 06:54 +0000
                Re: C23 (C2x) changes David Brown <david.brown@hesbynett.no> - 2021-10-04 09:58 +0200
                Re: C23 (C2x) changes Branimir Maksimovic <branimir.maksimovic@icloud.com> - 2021-10-04 15:52 +0000
                Re: C23 (C2x) changes Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2021-10-04 10:45 -0700
                Re: C23 (C2x) changes Branimir Maksimovic <branimir.maksimovic@icloud.com> - 2021-10-04 20:30 +0000
                Re: C23 (C2x) changes Tim Rentsch <tr.17687@z991.linuxsc.com> - 2021-10-06 03:57 -0700
                Re: C23 (C2x) changes Branimir Maksimovic <branimir.maksimovic@icloud.com> - 2021-10-06 12:27 +0000
          Re: C23 (C2x) changes Branimir Maksimovic <branimir.maksimovic@gmail.com> - 2021-09-29 03:38 +0000
      Re: C23 (C2x) changes Bart <bc@freeuk.com> - 2021-10-15 11:35 +0100
        Re: C23 (C2x) changes Lew Pitcher <lew.pitcher@digitalfreehold.ca> - 2021-10-15 18:27 +0000
          Re: C23 (C2x) changes Bart <bc@freeuk.com> - 2021-10-15 20:08 +0100
          Re: C23 (C2x) changes Lew Pitcher <lew.pitcher@digitalfreehold.ca> - 2021-10-15 19:20 +0000
            Re: C23 (C2x) changes Bart <bc@freeuk.com> - 2021-10-15 21:50 +0100
    Re: C23 (C2x) changes Florian Weimer <fw@deneb.enyo.de> - 2021-10-03 09:43 +0200
      Re: C23 (C2x) changes Guillaume <message@bottle.org> - 2021-10-03 18:53 +0200
      Re: C23 (C2x) changes Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2021-10-03 13:55 -0700
  Re: C23 (C2x) changes William Ahern <william@25thandClement.com> - 2021-09-21 22:57 -0700
    Re: C23 (C2x) changes Tim Rentsch <tr.17687@z991.linuxsc.com> - 2021-10-02 08:55 -0700
      Re: C23 (C2x) changes Branimir Maksimovic <branimir.maksimovic@icloud.com> - 2021-10-02 16:36 +0000
  Re: C23 (C2x) changes Guillaume <message@bottle.org> - 2021-09-22 20:27 +0200
    Re: C23 (C2x) changes Philipp Klaus Krause <pkk@spth.de> - 2021-09-22 22:25 +0200
      Re: C23 (C2x) changes Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2021-09-22 14:05 -0700
        Re: C23 (C2x) changes Bart <bc@freeuk.com> - 2021-09-22 23:24 +0100
          Re: C23 (C2x) changes Thiago Adams <thiago.adams@gmail.com> - 2021-09-22 18:49 -0700
        Re: C23 (C2x) changes Guillaume <message@bottle.org> - 2021-09-23 18:47 +0200
  Static bounds checking (was Re: C23 (C2x) changes) William Ahern <william@25thandClement.com> - 2021-09-23 21:11 -0700
    Re: Static bounds checking (was Re: C23 (C2x) changes) David Brown <david.brown@hesbynett.no> - 2021-09-24 08:51 +0200
      Re: Static bounds checking (was Re: C23 (C2x) changes) Philipp Klaus Krause <pkk@spth.de> - 2021-09-24 09:30 +0200
    Re: Static bounds checking (was Re: C23 (C2x) changes) Branimir Maksimovic <branimir.maksimovic@gmail.com> - 2021-09-24 07:52 +0000
      Re: Static bounds checking (was Re: C23 (C2x) changes) Philipp Klaus Krause <pkk@spth.de> - 2021-09-24 12:32 +0200
        Re: Static bounds checking (was Re: C23 (C2x) changes) Branimir Maksimovic <branimir.maksimovic@gmail.com> - 2021-09-24 10:49 +0000
          Re: Static bounds checking (was Re: C23 (C2x) changes) Philipp Klaus Krause <pkk@spth.de> - 2021-09-24 14:46 +0200
      Re: Static bounds checking (was Re: C23 (C2x) changes) Bonita Montero <Bonita.Montero@gmail.com> - 2021-09-24 18:14 +0200
        Re: Static bounds checking (was Re: C23 (C2x) changes) Branimir Maksimovic <branimir.maksimovic@gmail.com> - 2021-09-25 01:00 +0000
          Re: Static bounds checking (was Re: C23 (C2x) changes) Philipp Klaus Krause <pkk@spth.de> - 2021-09-25 07:44 +0200
            Re: Static bounds checking (was Re: C23 (C2x) changes) Branimir Maksimovic <branimir.maksimovic@gmail.com> - 2021-09-25 11:28 +0000
            Re: Static bounds checking (was Re: C23 (C2x) changes) antispam@math.uni.wroc.pl - 2021-09-28 10:56 +0000
          Re: Static bounds checking (was Re: C23 (C2x) changes) Bonita Montero <Bonita.Montero@gmail.com> - 2021-09-25 09:48 +0200
            Re: Static bounds checking (was Re: C23 (C2x) changes) Branimir Maksimovic <branimir.maksimovic@gmail.com> - 2021-09-25 11:30 +0000
              Re: Static bounds checking (was Re: C23 (C2x) changes) Kaz Kylheku <480-992-1380@kylheku.com> - 2021-09-25 20:49 +0000
                Re: Static bounds checking (was Re: C23 (C2x) changes) Branimir Maksimovic <branimir.maksimovic@gmail.com> - 2021-09-26 00:04 +0000
              Re: Static bounds checking (was Re: C23 (C2x) changes) Bonita Montero <Bonita.Montero@gmail.com> - 2021-09-26 06:56 +0200
  Re: C23 (C2x) changes Thiago Adams <thiago.adams@gmail.com> - 2021-09-27 10:15 -0700
    Re: C23 (C2x) changes Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2021-09-27 11:15 -0700
      Re: C23 (C2x) changes David Brown <david.brown@hesbynett.no> - 2021-09-27 22:11 +0200
      Re: C23 (C2x) changes Thiago Adams <thiago.adams@gmail.com> - 2021-09-27 14:20 -0700
        Re: C23 (C2x) changes Thiago Adams <thiago.adams@gmail.com> - 2021-09-27 14:31 -0700
      Re: C23 (C2x) changes Mehdi Amini <atorrses@gmail.com> - 2021-09-28 10:43 +0330
  Re: C23 (C2x) changes Tim Rentsch <tr.17687@z991.linuxsc.com> - 2021-10-06 04:01 -0700
    Re: C23 (C2x) changes Thiago Adams <thiago.adams@gmail.com> - 2021-10-06 04:42 -0700
      Re: C23 (C2x) changes Tim Rentsch <tr.17687@z991.linuxsc.com> - 2021-10-29 04:04 -0700
        Re: C23 (C2x) changes David Brown <david.brown@hesbynett.no> - 2021-10-29 16:34 +0200
    Re: C23 (C2x) changes Guillaume <message@bottle.org> - 2021-10-06 19:07 +0200
      Re: C23 (C2x) changes David Brown <david.brown@hesbynett.no> - 2021-10-07 11:06 +0200
        Re: C23 (C2x) changes Guillaume <message@bottle.org> - 2021-10-07 19:31 +0200
          Re: C23 (C2x) changes David Brown <david.brown@hesbynett.no> - 2021-10-07 22:14 +0200
            Re: C23 (C2x) changes Thiago Adams <thiago.adams@gmail.com> - 2021-10-08 06:18 -0700
              Re: C23 (C2x) changes Thiago Adams <thiago.adams@gmail.com> - 2021-10-08 06:21 -0700
      Re: C23 (C2x) changes Tim Rentsch <tr.17687@z991.linuxsc.com> - 2021-10-29 04:01 -0700
    Re: C23 (C2x) changes Bonita Montero <Bonita.Montero@gmail.com> - 2021-10-15 12:59 +0200
      Re: C23 (C2x) changes Jim Jackson <jj@franjam.org.uk> - 2021-10-15 16:50 +0000
        Re: C23 (C2x) changes Bonita Montero <Bonita.Montero@gmail.com> - 2021-10-16 07:51 +0200
          Re: C23 (C2x) changes "Chris M. Thomasson" <chris.m.thomasson.1@gmail.com> - 2021-10-16 11:50 -0700
            Re: C23 (C2x) changes Bonita Montero <Bonita.Montero@gmail.com> - 2021-10-16 21:28 +0200
              Re: C23 (C2x) changes Jim Jackson <jj@franjam.org.uk> - 2021-10-17 17:18 +0000
                Re: C23 (C2x) changes Bonita Montero <Bonita.Montero@gmail.com> - 2021-10-17 20:00 +0200
                Re: C23 (C2x) changes Bart <bc@freeuk.com> - 2021-10-17 19:17 +0100
                Re: C23 (C2x) changes Bonita Montero <Bonita.Montero@gmail.com> - 2021-10-18 06:49 +0200
                Re: C23 (C2x) changes Bart <bc@freeuk.com> - 2021-10-18 11:23 +0100
                Re: C23 (C2x) changes Bonita Montero <Bonita.Montero@gmail.com> - 2021-10-18 14:09 +0200
                Re: C23 (C2x) changes Branimir Maksimovic <branimir.maksimovic@icloud.com> - 2021-10-21 01:07 +0000
                Re: C23 (C2x) changes Branimir Maksimovic <branimir.maksimovic@icloud.com> - 2021-10-21 01:02 +0000
          Re: C23 (C2x) changes Guillaume <message@bottle.org> - 2021-10-16 21:28 +0200
            Re: C23 (C2x) changes Bonita Montero <Bonita.Montero@gmail.com> - 2021-10-17 06:04 +0200
              Re: C23 (C2x) changes Manfred <noname@add.invalid> - 2021-10-17 19:35 +0200
                Re: C23 (C2x) changes Bonita Montero <Bonita.Montero@gmail.com> - 2021-10-17 20:01 +0200
                Re: C23 (C2x) changes "Chris M. Thomasson" <chris.m.thomasson.1@gmail.com> - 2021-10-17 14:15 -0700
              Re: C23 (C2x) changes Branimir Maksimovic <branimir.maksimovic@icloud.com> - 2021-10-21 01:02 +0000
                Re: C23 (C2x) changes Bonita Montero <Bonita.Montero@gmail.com> - 2021-10-21 13:15 +0200

csiph-web