On Sun, Nov 13, 2005 at 04:29:26AM -0500, Robert Dewar wrote: > Richard Guenther wrote: > > >And this is why there seemed to be consensus to merge the two in the > >middle-end and preserve debug-info somehow differently. Like with > >a "frontend type-id" on the decl. That would allow lowering of f.i. > >integral types to their modes at some point, too. > > It seems a clear mistake to me to tie debug information so closely > to the actual gcc type information, and this is another example > of it causing unnecessary trouble.
It seems that there are two separate attributes that distinguish reference types from pointer types ... 1) auto-dereferencing: debuggers interpret a.field, where a is a reference, as dereference(a).field. This is a feature that both C++ and Fortran want. 2) in C++, references are assumed never to be null. My Fortran is very rusty (I wrote vast amounts of Fortran in the 80s, but those brain cells are mostly gone), but I had naively assumed that the same was true in Fortran-land, however there appear to be some cases where it is not true. But even in Fortran, it seems there are many cases where we know that references cannot be null. (There may be other implicit attributes as well). Maybe the middle end should only have one pointer type, but with at least two attributes, one to tell the debugger to auto-dereference, one to mark those pointers that cannot point to null. This might enable more optimization.