jjc@jclark.UUCP (James Clark) (10/11/89)
cfront 2.0 (on a Sun 4) generates incorrect (but legal) C code for the
following:
inline int and(int x, int y)
{
if (x) {
if (y)
return 1;
}
return 0;
}
extern "C" int abort(...);
main()
{
int m = 1, n = 1;
if (!and(m, n))
abort();
}
Is there anybody at AT&T who is interested in receiving bug reports?
I have a couple more (not as bad as this one). Is anybody keeping a
list of cfront 2.0 bugs that aren't covered in the release notes?
James Clark
jjc@jclark.uucpneath@solar-1.stars.flab.Fujitsu.JUNET (10/30/89)
The following code does not compile under <<AT&T C++ Translator 2.0 06/30/89>>.
However, if you comment out the line indicated, no problem! Is this a bug in
the translator or a feature of the language?
class foo {
public:
foo () {}; // Comment out this line and it works!
foo (const char *const &) {};
};
void bar () {
char* str = "abc";
foo a();
foo b("abc");
}
CC2 -c const_bug.C
"const_bug.C", line 10: error: bad argument list for foo::foo()
(no match against any foo::foo())
1 error
Regards
Martin Neath <neath@dsg.ti.com>
------------------------------------------------------------------------
DISCLAIMER: As always, the opinions expressed above are strictly my own
and do not reflect those of my employer, Texas Instruments.
------------------------------------------------------------------------schmidt@indetech.com (Douglas C. Schmidt) (09/05/90)
Howdy,
The following twisted program seems to trip a bug in cfront 2.0. Does
anyone know if this is fixed in 2.1?
thanks,
Doug
----------------------------------------
extern int foo (void);
int a = 100;
int i = 10 + foo ();
int j = i + *new int (1);
foo ()
{
static int k = foo ();
return 100 + a;
}
----------------------------------------
Here's the result of compiling with CC:
% CC t.c
"t.c", line 5: k undefined
And here's the mangled cfront code:
----------------------------------------
CC -F t.c
#line 1 "t.c"
/* <<AT&T C++ Translator 2.0 06/30/89>> */
/* < t.c > */
#line 1 "t.c"
char *__vec_new ();
#line 1 "t.c"
char __vec_delete ();
typedef int (*__vptp)();
struct __mptr {short d; short i; __vptp f; };
#line 1 "t.c"
#line 3 "t.c"
int a = 100 ;
#line 1 "t.c"
extern int foo__Fv ();
#line 4 "t.c"
int i = 0 ;
int j = 0 ;
#line 1 "t.c"
int foo__Fv ()
#line 8 "t.c"
{
#line 9 "t.c"
static int __1k ;
#line 10 "t.c"
static int __0__F2 ;
#line 9 "t.c"
__0__F2 ?0 :( (__1k = foo__Fv ( ) ), (__0__F2 = 1)) ;
return (100 + a );
}
#line 1 "t.c"
extern char *__nw__FUi ();
#line 13 "t.c"
char __sti__t_c_a_ ()
#line 4 "t.c"
{
#line 4 "t.c"
int *__0__N1 ;
i = (10 + foo__Fv ( ) );
#line 5 "t.c"
j = (i + ((*( ( (__0__N1 = (((int *)__nw__FUi ( sizeof (int )) ))), (((*__0__N1 ))= k )) ,
#line 5 "t.c"
__0__N1 ) )));
}
#line 13 "t.c"
/* the end */
----------------------------------------
--
____*_ Douglas C. Schmidt schmidt@indetech.com
\ / / Independence Technologies {sun,sharkey,pacbell}!indetech!schmidt
\/ / 42705 Lawrence Place FAX: 415 438-2034
\/ Fremont, CA 94538 Voice: 415 438-2023