[comp.lang.c] Compiler bug?

per@chalmers.UUCP (Per Westerlund) (12/03/86)

This small example does not behave as I expected on an NCR Tower XP,
3.00.02 (SysV):

unsigned char
a()
{
    int a, b;

    a = b = 0200;
    return a + b;
}

main()
{
    int	i;

    i = a();
    printf("%o\n", i);
}

On the Tower I get 0400, while on a Vax (4.2+) I get 0, which is what
I expected after having read K&R. Should I report this as an error?

			Per Westerlund
			Chalmers University of Technology
			Dept of Computer Sci.
			Sweden

curtis@se-sd.UUCP (Curtis Johnson x6241) (12/05/86)

I thought Per might have a version of the compiler that has since been
improved, so I compiled his program (on a Tower XP w/3.00.04), ran it 
and found that 0400 was returned by a().

I looked in K&R for hints and found some ambiguous language describing
the use of the "return" statement.

On page 68 (chapter 4.1), is the statement:

... "Any expression can follow  return:

	return(expression)" ...

There is not a word in this section concerning the usage of parentheses
with the return statment. Hmmmmmm...

On page 203 (Appendix A: C Reference Manual, section 9.10 Return Statement)
I found:

... "A function returns to its caller by means of the  return  statement,
which has one of the forms

	return ;
	return  expression ;" ...

Again, there is no wording concerning the presence ( or absence ) of 
parentheses.

Looking into the definition of "expression" is no help as the only mention
of parentheses with respect to expressions is made concerning primary
expressions only ( which this case is not).

The ANSI draft standard for "C" (July 9, 1986) agrees with K&R to the
extent that parentheses are not explicitly required with the return
statement.

Since K&R and the draft ANSI standard don't mention parentheses with
respect to the return statement, I would guess that implementations that
require parentheses are wrong.


-- 

Curtis Johnson		curtis@se-sd.UUCP
    ...!sdcsvax!ncr-sd!se-sd!curtis
NCR Corp. Systems Engineering, San Diego 

wescott@sauron.UUCP (Mike Wescott) (12/08/86)

In article <898@chalmers.UUCP> per@chalmers.UUCP (Per Westerlund) writes:
> This small example does not behave as I expected on an NCR Tower XP,
> 3.00.02 (SysV):
		...

Yep. It's a bug. A new one to us. A fix has been identified and will be
released with all possible speed.  It also appears in the Tower32 releases.

	-Mike Wescott
	ncrcae!wescott
-- 
	-Mike Wescott
	 ncrcae!wescott