Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
| From | Spiros Bousbouras <spibou@gmail.com> |
|---|---|
| Newsgroups | comp.std.c |
| Subject | Re: Does reading an uninitialized object have undefined behavior? |
| Date | 2023-08-30 19:53 +0000 |
| Organization | To protect and to server |
| Message-ID | <KvVxh3+WExIyDnM+5@bongo-ra.co> (permalink) |
| References | (9 earlier) <867cpu5h8w.fsf@linuxsc.com> <a3199783-d8b7-4065-836b-08f647a6808en@googlegroups.com> <868r9xz0ek.fsf@linuxsc.com> <5+eRe7cp3yQjL4=AX@bongo-ra.co> <86sf82ulmb.fsf@linuxsc.com> |
On Tue, 29 Aug 2023 04:35:40 -0700 Tim Rentsch <tr.17687@z991.linuxsc.com> wrote: > Spiros Bousbouras <spibou@gmail.com> writes: > > > On Sat, 26 Aug 2023 19:25:55 -0700 > > Tim Rentsch <tr.17687@z991.linuxsc.com> wrote: > > > >> Sometimes people use compiler options to turn off, for example, > >> so-called "strict aliasing", and of course the C standard allows > >> us to do that. But compilers aren't required to provide such an > >> option, and if they do the option may not do exactly what we > >> expect it to do, because there is no standard specification for > >> it. The C standard should define officially sanctioned > >> mechanisms -- as for example standard #pragma's -- to give > >> standard-defined semantics to certain constructs of undefined > >> behavior that resemble, eg, -fno-strict-aliasing. > > > > Surely the starting point for this should be the documentation of > > the compilers to specify precisely what -fno-strict-aliasing does. > > [...] > > Not at all. It's easy to write a specification that says what we > want to do, along similar lines to what is said in the footnote > about union member access in section 6.5.2.3 > > If the member used to access the contents of a union object > is not the same as the member last used to store a value in > the object, the appropriate part of the object representation > of the value is reinterpreted as an object representation in > the new type as described in 6.2.6 (a process sometimes called > "type punning"). This might be a trap representation. Works for me but it would be good to know that this is how compiler writers actually understand -fno-strict-aliasing .Is there any compiler documentation which says something like this ? > That behavior should be the default, for all accesses. For cases > where a developer wants to give permission to the compiler to > optimize based on cross-type non-interference assumptions, there > should be a #pragma to do something similar to what effective type > rules do now. The effective type rules are in need of re-writing > anyway, and making type punning be the default doesn't break any > programs, because compilers are already free to ignore the > implications of violating effective type conditions. [...] > > For example it has been pointed out on comp.lang.c that it's > > impossible to write a malloc() implementation in conforming > > C. This is certainly a weakness which should be addressed with > > some appropriate #pragma . > > There isn't any reason to think malloc() should be writable in > completely portable C. That's the point of putting malloc() in > the system library in the first place. By the way, with type > punning semantics mentioned above being the default, and with the > alignment features added in C11, I think it is possible to write > malloc() in portable C without needed any additional language > changes. But even if it isn't that is no cause for concern; one > of the principal reasons for having a system library is to > provide functionality that the core language cannot express (or > cannot express conveniently). One might want to experiment with different allocation algorithms and it seems to me that this sort of thing is within the "remit" of C. So ideally one should be able to write it in C and prove , starting from the standard or precise specifications in compiler documentation , that it works correctly. I don't necessarily mean prove the correctness of the whole code but certain key parts. Another application I have in mind is languages which get translated to C and support garbage collection. Again one might want to use the standard malloc() to allocate a large block of memory and use different parts of this memory for different types of objects. If with the semantics you propose these things are possible , I'm happy. I'm not bothered which is the default as long as there is a precise specification from which you can reason that you get the desired behaviour. > >> Before leaving the sub-topic of undefined behavior, let me mention > >> two success stories. The first is 'restrict': the performance > >> implications are local, the choice is under control of the program > >> (and programmer), and the default choice is to play safe. Good > >> show. > > > > From my point of view , restrict is not a success because the > > specification of restrict is the one part of the C1999 standard I > > have given up trying to understand. I understand the underlying > > idea but the specifics elude me. [...] > > I agree the formal definition of restrict is rather daunting. In > practice though I think using restrict with confidence is not > overly difficult. My working model for restrict is something > like this: > > 1. Use restrict only in the declarations of function > parameters. > > 2. For a declaration like const T *restrict foo , > the compiler may assume that any objects that can be > accessed through 'foo' will not be modified. Wouldn't that also be the case with just const T * foo ? > 3. For a declaration like T *restrict bas , > the compiler may assume that any changes to objects > that can be accessed through 'bas' will be done > using 'bas' or a pointer value derived from 'bas' > (and in particular that no changes will happen > other than through 'bas' or 'bas'-derived pointer > values). > > Is this summary description helpful? It seems clear enough but , as I've said , I don't have any use for restrict anyway and it's not worth it for me to expend the additional mental effort to confirm that my code obeys the additional restrictions of restrict .If I call a function with a preexisting interface which involves restrict then it seems easy enough to obey the restrictions. -- Carrie also narrates the film, providing useful guidelines for those challenged by its intricacies. Sample: "Later that day, Big and I arrived home." http://www.rogerebert.com/reviews/sex-and-the-city-2-2010
Back to comp.std.c | Previous | Next — Previous in thread | Next in thread | Find similar
Does reading an uninitialized object have undefined behavior? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2023-07-20 22:16 -0700
Re: Does reading an uninitialized object have undefined behavior? Ben Bacarisse <ben.usenet@bsb.me.uk> - 2023-07-21 16:33 +0100
Re: Does reading an uninitialized object have undefined behavior? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2023-07-21 11:56 -0700
Re: Does reading an uninitialized object have undefined behavior? Ben Bacarisse <ben.usenet@bsb.me.uk> - 2023-07-21 20:54 +0100
Re: Does reading an uninitialized object have undefined behavior? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2023-07-21 14:26 -0700
Re: Does reading an uninitialized object have undefined behavior? Ben Bacarisse <ben.usenet@bsb.me.uk> - 2023-07-21 23:39 +0100
Re: Does reading an uninitialized object have undefined behavior? Tim Rentsch <tr.17687@z991.linuxsc.com> - 2023-08-12 17:00 -0700
Re: Does reading an uninitialized object have undefined behavior? Martin Uecker <ma.uecker@gmail.com> - 2023-08-13 23:41 -0700
Re: Does reading an uninitialized object have undefined behavior? Tim Rentsch <tr.17687@z991.linuxsc.com> - 2023-08-15 21:06 -0700
Re: Does reading an uninitialized object have undefined behavior? Martin Uecker <ma.uecker@gmail.com> - 2023-08-15 22:40 -0700
Re: Does reading an uninitialized object have undefined behavior? Tim Rentsch <tr.17687@z991.linuxsc.com> - 2023-08-16 23:13 -0700
Re: Does reading an uninitialized object have undefined behavior? Kaz Kylheku <864-117-4973@kylheku.com> - 2023-08-17 07:08 +0000
Re: Does reading an uninitialized object have undefined behavior? Martin Uecker <ma.uecker@gmail.com> - 2023-08-18 12:44 -0700
Re: Does reading an uninitialized object have undefined behavior? Kaz Kylheku <864-117-4973@kylheku.com> - 2023-08-19 05:04 +0000
Re: Does reading an uninitialized object have undefined behavior? Martin Uecker <ma.uecker@gmail.com> - 2023-08-19 01:36 -0700
Re: Does reading an uninitialized object have undefined behavior? Richard Damon <Richard@Damon-Family.org> - 2023-08-19 09:18 -0400
Re: Does reading an uninitialized object have undefined behavior? Martin Uecker <ma.uecker@gmail.com> - 2023-08-19 11:12 -0700
Re: Does reading an uninitialized object have undefined behavior? Tim Rentsch <tr.17687@z991.linuxsc.com> - 2023-08-18 20:20 -0700
Re: Does reading an uninitialized object have undefined behavior? Kaz Kylheku <864-117-4973@kylheku.com> - 2023-08-19 05:23 +0000
Re: Does reading an uninitialized object have undefined behavior? Tim Rentsch <tr.17687@z991.linuxsc.com> - 2023-08-18 22:56 -0700
Re: Does reading an uninitialized object have undefined behavior? Martin Uecker <ma.uecker@gmail.com> - 2023-08-18 12:52 -0700
Re: Does reading an uninitialized object have undefined behavior? Tim Rentsch <tr.17687@z991.linuxsc.com> - 2023-08-26 19:25 -0700
Re: Does reading an uninitialized object have undefined behavior? Spiros Bousbouras <spibou@gmail.com> - 2023-08-27 08:31 +0000
Re: Does reading an uninitialized object have undefined behavior? Tim Rentsch <tr.17687@z991.linuxsc.com> - 2023-08-29 04:35 -0700
Re: Does reading an uninitialized object have undefined behavior? Spiros Bousbouras <spibou@gmail.com> - 2023-08-30 19:53 +0000
Re: Does reading an uninitialized object have undefined behavior? Tim Rentsch <tr.17687@z991.linuxsc.com> - 2023-08-30 17:40 -0700
Re: Does reading an uninitialized object have undefined behavior? Spiros Bousbouras <spibou@gmail.com> - 2023-08-31 18:18 +0000
Re: Does reading an uninitialized object have undefined behavior? Tim Rentsch <tr.17687@z991.linuxsc.com> - 2023-09-05 05:39 -0700
Re: Does reading an uninitialized object have undefined behavior? Tim Rentsch <tr.17687@z991.linuxsc.com> - 2023-09-05 17:03 -0700
Re: Does reading an uninitialized object have undefined behavior? Jakob Bohm <jb-usenet@wisemo.com.invalid> - 2023-09-07 17:09 +0200
Re: Does reading an uninitialized object have undefined behavior? Ben Bacarisse <ben.usenet@bsb.me.uk> - 2023-09-07 17:19 +0100
Re: Does reading an uninitialized object have undefined behavior? Jakob Bohm <jb-usenet@wisemo.com.invalid> - 2023-09-08 23:12 +0200
Re: Does reading an uninitialized object have undefined behavior? Ben Bacarisse <ben.usenet@bsb.me.uk> - 2023-09-08 22:31 +0100
Re: Does reading an uninitialized object have undefined behavior? Kaz Kylheku <864-117-4973@kylheku.com> - 2023-07-22 06:40 +0000
Re: Does reading an uninitialized object have undefined behavior? Martin Uecker <ma.uecker@gmail.com> - 2023-07-22 06:03 -0700
Re: Does reading an uninitialized object have undefined behavior? Tim Rentsch <tr.17687@z991.linuxsc.com> - 2023-07-25 21:53 -0700
Re: Does reading an uninitialized object have undefined behavior? Tim Rentsch <tr.17687@z991.linuxsc.com> - 2023-08-16 11:11 -0700
Re: Does reading an uninitialized object have undefined behavior? Kaz Kylheku <864-117-4973@kylheku.com> - 2023-07-21 17:42 +0000
Re: Does reading an uninitialized object have undefined behavior? Jakob Bohm <jb-usenet@wisemo.com.invalid> - 2023-07-24 07:53 +0200
Re: Does reading an uninitialized object have undefined behavior? Tim Rentsch <tr.17687@z991.linuxsc.com> - 2023-07-25 21:57 -0700
Re: Does reading an uninitialized object have undefined behavior? Tim Rentsch <tr.17687@z991.linuxsc.com> - 2023-08-03 13:13 -0700
Re: Does reading an uninitialized object have undefined behavior? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2023-08-03 15:20 -0700
Re: Does reading an uninitialized object have undefined behavior? Martin Uecker <ma.uecker@gmail.com> - 2023-08-05 01:15 -0700
Re: Does reading an uninitialized object have undefined behavior? Tim Rentsch <tr.17687@z991.linuxsc.com> - 2023-08-16 09:19 -0700
Re: Does reading an uninitialized object have undefined behavior? Kaz Kylheku <864-117-4973@kylheku.com> - 2023-08-16 19:51 +0000
Re: Does reading an uninitialized object have undefined behavior? Kaz Kylheku <864-117-4973@kylheku.com> - 2023-08-16 20:03 +0000
Re: Does reading an uninitialized object have undefined behavior? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2023-08-16 13:43 -0700
Re: Does reading an uninitialized object have undefined behavior? Kaz Kylheku <864-117-4973@kylheku.com> - 2023-08-16 21:08 +0000
csiph-web