schmidt@crimee.ics.uci.edu (Doug Schmidt) (05/28/90)
I believe the following indicates a bug with the cfront 2.0 compiler.
Can some please let me know if it persists in version 2.1?
Here's the code:
----------------------------------------
char **lookup (void) { return 0; }
char *& foo ()
{
char *&t = (char *&) lookup ();
return t;
}
----------------------------------------
Here's the diagnostic:
----------------------------------------
CC l.c:
/usr/gnu/gcc -L/usr/public/lib/CC l.c -lC
l.c: In function foo__Fv:
l.c:5: invalid lvalue in unary `&'
----------------------------------------
Here's the compiled code:
----------------------------------------
/* <<AT&T C++ Translator 2.0 06/30/89>> */
/* < l.c > */
char *__vec_new ();
char __vec_delete ();
typedef int (*__vptp)();
struct __mptr {short d; short i; __vptp f; };
char **lookup__Fv (){ return (char **)0 ; }
char **foo__Fv ()
{
char **__1t ;
__1t = (((char **)(& lookup__Fv ( ) )));
return __1t ;
}
/* the end */
----------------------------------------
Note that cfront is generating C code that takes the address of a
value returned from a function. I assume that anytime the underlying
C compiler produces a diagnostic that is missed by the cfront
translator that this indicates a bug with cfront.
Doug
--
The official language of San Marcos is Swedish. All boys | schmidt@ics.uci.edu
under the age of sixteen years old are now sixteen years | office (714) 856-4043
old. Underwear must be changed every half hour. It will +----------------------
be worn on the outside, so we can check. -- `Bananas' by Woody Allen