Deutsch   English   Français   Italiano  
<20240915125006.00006e78@yahoo.com>

View for Bookmarking (what is this?)
Look up another Usenet article

Path: ...!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail
From: Michael S <already5chosen@yahoo.com>
Newsgroups: comp.arch
Subject: Re: Computer architects leaving Intel...
Date: Sun, 15 Sep 2024 12:50:06 +0300
Organization: A noiseless patient Spider
Lines: 106
Message-ID: <20240915125006.00006e78@yahoo.com>
References: <vaqgtl$3526$1@dont-email.me>
	<memo.20240830090549.19028u@jgd.cix.co.uk>
	<2024Aug30.161204@mips.complang.tuwien.ac.at>
	<86r09ulqyp.fsf@linuxsc.com>
	<2024Sep8.173639@mips.complang.tuwien.ac.at>
	<p1cvdjpqjg65e6e3rtt4ua6hgm79cdfm2n@4ax.com>
	<2024Sep10.101932@mips.complang.tuwien.ac.at>
	<ygn8qvztf16.fsf@y.z>
	<2024Sep11.123824@mips.complang.tuwien.ac.at>
	<vbsoro$3ol1a$1@dont-email.me>
	<867cbhgozo.fsf@linuxsc.com>
	<20240912142948.00002757@yahoo.com>
	<865xqzg63u.fsf@linuxsc.com>
	<20240913144411.00005866@yahoo.com>
	<vc2ber$120mf$1@dont-email.me>
	<20240914215922.000033d1@yahoo.com>
	<vc4qqv$1lgpq$1@dont-email.me>
	<20240915001939.00003be0@yahoo.com>
	<vc64gr$22g95$1@dont-email.me>
MIME-Version: 1.0
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: 7bit
Injection-Date: Sun, 15 Sep 2024 11:49:42 +0200 (CEST)
Injection-Info: dont-email.me; posting-host="b1d11931d9aad568cedfe64b3767d71c";
	logging-data="2177741"; mail-complaints-to="abuse@eternal-september.org";	posting-account="U2FsdGVkX19sVXrDsOBkEv28th2Tg19kl6jsfCFz7vQ="
Cancel-Lock: sha1:S7+UxWzPw00bMA+9zHwinP+n7nw=
X-Newsreader: Claws Mail 3.19.1 (GTK+ 2.24.33; x86_64-w64-mingw32)
Bytes: 5410

On Sun, 15 Sep 2024 08:05:47 -0000 (UTC)
Thomas Koenig <tkoenig@netcologne.de> wrote:

> Michael S <already5chosen@yahoo.com> schrieb:
> > On Sat, 14 Sep 2024 20:14:23 -0000 (UTC)
> > Thomas Koenig <tkoenig@netcologne.de> wrote:
> >  
> >> Michael S <already5chosen@yahoo.com> schrieb:  
> >> > On Fri, 13 Sep 2024 21:39:39 -0000 (UTC)
> >> > Thomas Koenig <tkoenig@netcologne.de> wrote:
> >> >    
> >> >> Michael S <already5chosen@yahoo.com> schrieb:    
> >> >> > On Fri, 13 Sep 2024 04:12:21 -0700
> >> >> > Tim Rentsch <tr.17687@z991.linuxsc.com> wrote:
> >> >> >      
> >> >> >> Michael S <already5chosen@yahoo.com> writes:      
> >> >>     
> >> >> >> > struct {
> >> >> >> >  char x[8]
> >> >> >> >  int  y;
> >> >> >> > } bar;
> >> >> >> > bar.y = 0; bar.x[8] = 42;
> >> >> >> >
> >> >> >> > IMHO, here behavior should be fully defined by
> >> >> >> > implementation. And in practice it is.  Just not in
> >> >> >> > theory.        
> >> >> >> 
> >> >> >> Do you mean union rather than struct?  And do you mean
> >> >> >> bar.x[7] rather than bar.x[8]?  Surely no one would expect
> >> >> >> that storing into bar.x[8] should be well-defined behavior.
> >> >> >> 
> >> >> >> If the code were this
> >> >> >> 
> >> >> >>     union {
> >> >> >>       char x[8];
> >> >> >>       int  y;
> >> >> >>     } bar;
> >> >> >>     bar.y = 0;  bar.x[7] = 42;
> >> >> >> 
> >> >> >> and assuming sizeof(int) == 4, what is it that you think
> >> >> >> should be defined by the C standard but is not?  And the
> >> >> >> same question for a struct if that is what you meant.      
> >> >> >
> >> >> >
> >> >> > No, I mean struct and I mean 8.
> >> >> > And I mean that a typical implementation-defined behavior
> >> >> > would be bar.y==42 on LE machines and bar.y==42*2**24 on BE
> >> >> > machines. As it actually happens in reality with all
> >> >> > production compilers. 
> >> >> 
> >> >> Ah, you want to re-introduce Fortran's storage association and
> >> >> common blocks, but without the type safety.  Good idea, that.
> >> >> That created *really* interesting bugs, and Real Programmers
> >> >> (TM) have to have something that pays their salaries, right?
> >> >> 
> >> >> SCNR    
> >> >
> >> > What I wrote is how all production C compilers work today. So it
> >> > will add no new bugs.    
> >> 
> >> Maybe I should be a little bit more precise in why I think this
> >> is an extemely bad idea.
> >> 
> >> struct {
> >>   char x[8]
> >>   int  y;
> >> } bar;
> >> 
> >> Assume
> >> 
> >>   bar.y = 1234;
> >>   bar.x[i] = 42;  // The compiler does not know i
> >>   // Do something with bar.y
> >> 
> >> The compiler should then treat the access to bar.x[i] as if bar.y
> >> was clobbered by the assignment statement, and reload bar.y if
> >> it was kept in a register?  That is the semantics you propose.
> >>   
> >
> > Yes, exactly.  
> 
> So, volatile for all structs, 

No.
Access to field of struct's should be ordered only relatively to
accesses to other fields *of the same instance* of the struct. And,
of course, usual 'as if' applies, so optimizing compiler can figure out
that bar.x[7] and bar.y do not overlap and thus generate code knowing
that write to one does not clobber the other. 
That's pretty far from semantics of volatile.

> plus prescribed behavior on array overruns.

Only withing bound of struct. bar.x[12] remains UB

> 
> At the risk of repeating myself: This is an extremely bad idea.
> 
> I rest my case.

You seem to think that C should be as optimizable and as full of UBs as
Fortran. Many compiler authors agree with you. 
I have different idea. IMHO, your party exploits the letter of C
standard in violation to its spirit.