Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

bug in v7 C compiler

2 views
Skip to first unread message

naha@ll-asg

unread,
Jul 31, 1981, 8:30:57 AM7/31/81
to
From: naha at LL-ASG (Mark Nahabedian)
The version 7 C compiler causes sign extension to be performed when one casts
an unsigned integer to a long when innitializing variables.

As a test, consider the source program

long a = (long) 0177777;
long b = (long) (unsigned int) 0177777;
long c = 0177777L;
long x;
int y = 0177777;
unsigned int z = 0177777;
foo()
{
x = (long) y;
x = (long) z;
}

which produces the assembler input

.globl _a
.data
_a:
177777; 177777
.globl _b
.data
_b:
177777; 177777
.globl _c
.data
_c:
0; 177777
.comm _x,4
.globl _y
.data
_y:
177777
.globl _z
.data
_z:
177777
.globl _foo
.text
_foo:
~~foo:
jsr r5,csv
jbr L1
L2:mov _y,2+_x
sxt _x
mov _z,2+_x
clr _x
L3:jmp cret
L1:jbr L2
.globl
.data

Note that in the case of actual assingmet at run-time it sign extends when
it should and doesn't when it shouldn't.

When it innitializes the variable b, it converts -1 integer to -1 long even
when it has been explicitly told that the -1 integer is really an unsigned
0177777 integer.

Any ideas about why it does this or how it could be fixed?


-----


0 new messages