This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: generalized lvalues -- patch outline



On Nov 23, 2004, at 7:06 AM, Andrew Pinski wrote:



On Nov 23, 2004, at 9:56 AM, Michael Matz wrote:


Hi,Practically speaking 4.0 is currently strictly less usefull in some
aspects for the average C programmer.

The average C programmer would not have thought to use this extension unless they just decided one day to try it or they actually read the gcc documentation (which I know almost nobody does).

I believe this is true, however some programmers end up using gcc extensions without knowing they are extensions (e.g. variable length arrays, non-constant initializers, etc.). This happens for the same reason you cite - many programmers don't study the language standard (or compile with the strict ANSI modes). Since many of the extensions don't add any new syntax, it is easy to become dependent on these features without realizing it.


Like you, I'd love to see this feature removed. Unfortunately, I am concerned about breaking code. Language features are like API's...they are part of the contract we make with our developers. Years ago, I felt inclined to disable all gcc extensions for Apple's compiler. I didn't do it because I knew there would be fallout. Unfortunately, this is a great example of why the thought crossed my mind...

btw...I contacted Andreas Hommel (author of the CW C++ front-end). He added generalized lvalue support for gcc compatibility (though they appear to get the right answer for the cases I've been forwarded, whereas gcc doesn't). He has no affinity for the feature and would consider removing it...he has the same concern as I just described...breaking code.

(We keep getting
bug reports about invalid C++ which explicitly added to the changes
page and in the bug section of the documentation but those people
seems not bothered to read those places.)

if you had the following:

((int*)a)++;

the better idea would be:

char *a1 = (char*)a;
a1 += sizeof(int)/sizeof(char);
a = (typeof(a))(a1);

-- Pinski



Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]