This is a view of the patch/diff... This is really just +6 lines... ` if( !flag_iso2xc) `{` `}` `attribute fallthrough` `if(flag_iso2cx)` `return ptr`
https://github.com/gcc-mirror/gcc/pull/41/commits/915bcffdea0aa4fead66c41830b66aa3db212307 While the compiler does compile itself, and a simple test case, successfully ``` #include <stdio.h> struct s { int a, b; }; void f( void ){ struct s S; struct s *P = &S; P.a = 5; // 'wrong' operator P.b = 13; // 'wrong' operator printf( "Output: %d %d\n", S->a, S->b ); // 'wrong' operators... } int main( void ) { f(); return 0; } ``` I haven't built the testsuite... On Mon, Dec 16, 2019 at 5:51 AM J Decker <d3c...@gmail.com> wrote: > Here's the gist of what I would propose... > https://gist.github.com/d3x0r/f496d0032476ed8b6f980f7ed31280da > > In C, there are two operators . and -> used to access members of struct > and union types. These operators are specified such that they are always > paired in usage; for example, if the left hand expression is a pointer to a > struct or union, then the operator -> MUST be used. There is no occasion > where . and -> may be interchanged, given the existing specification. > > It should be very evident to the compiler whether the token before '.' or > '->' is a pointer to a struct/union or a struct/union, and just build the > appropriate output. > > The source modification for the compiler is very slight, even depending on > flag_c2x(that's not it's name). It ends up changing a lot of existing > lines, just to change their indentation; but that shouldn't really count > against 'changed lines'. > > I'm sure, after 4 score and some years ('78-19) that it must surely have > come up before? Anyone able to point me to those existing proposals? > > D >