tuck@CS.UNC.EDU (Russ Tuck) (07/07/89)
Return-Receipt-To: tuck@cs.unc.edu
Enclosed is a shar file. The bug report is in the leading comment of the .c
file (tuck0.c), and includes my address.
Since I haven't found a work-around yet, I'd appreciate any advice, comments,
work-arounds or fix.
I appreciate all the good work that has gone into developing g++.
Russ
#! /bin/sh
# This is a shell archive, meaning:
# 1. Remove everything above the #! /bin/sh line.
# 2. Save the resulting text in a file.
# 3. Execute the file with /bin/sh (not csh) to create the files:
# tuck0.c
# tuck0.s
# tuck0.script
# This archive created: Thu Jul 6 15:55:49 1989
# By: Russ Tuck ()
export PATH; PATH=/bin:$PATH
echo shar: extracting "'tuck0.c'" '(1627 characters)'
if test -f 'tuck0.c'
then
echo shar: will not over-write existing file "'tuck0.c'"
else
sed 's/^ X//' << \SHAR_EOF > 'tuck0.c'
X/* G++ bug report.
X This is file "tuck0.c".
X Submitted by:
X Russ Tuck internet: tuck@cs.unc.edu
X Computer Science Dept., Sitterson Hall csnet: tuck@unc
X University of North Carolina uucp: ...!mcnc!unc!tuck
X Chapel Hill, NC 27599-3175, USA Phone: (919)962-1755 or 962-1932
X g++ version: 1.35.1-
X cpu: Sun-4/280 (sparc)
X os: SunOS Sys4-3.2
X date: 6 July 1989
X Summary:
X 1) Particular expressions involving division (/) are sometimes evaluated
X incorrectly at run time. (It appears to me that reg %o1 is not being
X set before calling .div; it sometimes happens to have the right value.)
X 2) g++ -O tuck0.c gets "fatal signal 4" in cc1plus
X
X I have not found a work-around yet.
X
X Enclosures:
X tuck0.s -- assembler output from "g++ -g -S tuck0.c".
X tuck0.script -- script showing compile and run of tuck0.c
X*/
X
X#include <stdio.h>
X
Xmain()
X{
X printf("(5 + 32) / 32 evaluates to %d.\n", (5 + 32) / 32);
X int ti = 32;
X printf("(5 + ti) / ti evaluates to %d.\n", (5 + ti) / ti);
X printf("(5 + ti) / ti evaluates to %d.\n", (5 + ti) / ti);
X unsigned tu = 32;
X printf("(5 + tu) / tu evaluates to %u.\n", (5 + tu) / tu);
X printf("(5 + tu) / tu evaluates to %u.\n", (5 + tu) / tu);
X
X printf("37 / 32 evaluates to %d.\n", 37 / 32);
X printf("37 / tu evaluates to %u.\n", 37 / tu);
X printf("37 / tu evaluates to %u.\n", 37 / tu);
X printf("37 / ti evaluates to %d.\n", 37 / ti);
X printf("37 / ti evaluates to %d.\n", 37 / ti);
X
X int ti0 = 32;
X int ti1 = 5 + ti0;
X int ti2 = ti1 / ti0;
X printf("ti0 = %d, ti1 = %d, ti2 = %d\n", ti0, ti1, ti2);
X}
SHAR_EOF
if test 1627 -ne "`wc -c < 'tuck0.c'`"
then
echo shar: error transmitting "'tuck0.c'" '(should have been 1627 characters)'
fi
fi # end of overwriting check
echo shar: extracting "'tuck0.s'" '(3557 characters)'
if test -f 'tuck0.s'
then
echo shar: will not over-write existing file "'tuck0.s'"
else
sed 's/^ X//' << \SHAR_EOF > 'tuck0.s'
Xgcc_compiled.:
X .stabs "tuck0.c",100,0,0,Ltext
XLtext:
X.stabs "int:t1=r1;-2147483648;2147483647;",128,0,0,0
X.stabs "char:t2=r2;0;127;",128,0,0,0
X.stabs "long int:t3=r1;-2147483648;2147483647;",128,0,0,0
X.stabs "unsigned int:t4=r1;0;-1;",128,0,0,0
X.stabs "long unsigned int:t5=r1;0;-1;",128,0,0,0
X.stabs "short int:t6=r1;-32768;32767;",128,0,0,0
X.stabs "long long int:t7=r1;0;-1;",128,0,0,0
X.stabs "short unsigned int:t8=r1;0;65535;",128,0,0,0
X.stabs "long long unsigned int:t9=r1;0;-1;",128,0,0,0
X.stabs "signed char:t10=r1;-128;127;",128,0,0,0
X.stabs "unsigned char:t11=r1;0;255;",128,0,0,0
X.stabs "float:t12=r1;4;0;",128,0,0,0
X.stabs "double:t13=r1;8;0;",128,0,0,0
X.stabs "long double:t14=r1;8;0;",128,0,0,0
X.stabs "void:t15=15",128,0,0,0
X.stabs "$vtbl_ptr_type:t16=s8delta:/26,0,16;index:/26,16,16;pfn:/217=*15,32,32;delta2:/26,32,16;;~;",128,0,0,0
X.text
XLC0:
X .ascii "(5 + 32) / 32 evaluates to %d.\12\0"
XLC1:
X .ascii "(5 + ti) / ti evaluates to %d.\12\0"
XLC2:
X .ascii "(5 + tu) / tu evaluates to %u.\12\0"
XLC3:
X .ascii "37 / 32 evaluates to %d.\12\0"
XLC4:
X .ascii "37 / tu evaluates to %u.\12\0"
XLC5:
X .ascii "37 / ti evaluates to %d.\12\0"
XLC6:
X .ascii "ti0 = %d, ti1 = %d, ti2 = %d\12\0"
X .align 4
X.global _main
X .proc 1
X_main:
X.stabn 68,0,28,LM1
XLM1:
X !#PROLOGUE# 0
X save %sp,-152,%sp
X !#PROLOGUE# 1
XLBB2:
X.stabn 68,0,29,LM2
XLM2:
X sethi %hi(LC0),%o0
X or %lo(LC0),%o0,%o0
X mov 1,%o1
X call _printf,0
X nop
X.stabn 68,0,30,LM3
XLM3:
X mov 32,%o4
X st %o4,[%fp-20]
X.stabn 68,0,31,LM4
XLM4:
X ld [%fp-20],%o0
X add %o0,5,%o0
X call .div,0
X nop
X mov %o0,%o1
X sethi %hi(LC1),%o0
X or %lo(LC1),%o0,%o0
X mov %o1,%o1
X call _printf,0
X nop
X.stabn 68,0,32,LM5
XLM5:
X ld [%fp-20],%o0
X add %o0,5,%o0
X call .div,0
X nop
X mov %o0,%o1
X sethi %hi(LC1),%o0
X or %lo(LC1),%o0,%o0
X mov %o1,%o1
X call _printf,0
X nop
X.stabn 68,0,33,LM6
XLM6:
X mov 32,%o4
X st %o4,[%fp-28]
X.stabn 68,0,34,LM7
XLM7:
X ld [%fp-28],%o0
X add %o0,5,%o0
X call .udiv,0
X nop
X mov %o0,%o1
X sethi %hi(LC2),%o0
X or %lo(LC2),%o0,%o0
X mov %o1,%o1
X call _printf,0
X nop
X.stabn 68,0,35,LM8
XLM8:
X ld [%fp-28],%o0
X add %o0,5,%o0
X call .udiv,0
X nop
X mov %o0,%o1
X sethi %hi(LC2),%o0
X or %lo(LC2),%o0,%o0
X mov %o1,%o1
X call _printf,0
X nop
X.stabn 68,0,37,LM9
XLM9:
X sethi %hi(LC3),%o0
X or %lo(LC3),%o0,%o0
X mov 1,%o1
X call _printf,0
X nop
X.stabn 68,0,38,LM10
XLM10:
X call .udiv,0
X nop
X mov %o0,%o1
X sethi %hi(LC4),%o0
X or %lo(LC4),%o0,%o0
X mov %o1,%o1
X call _printf,0
X nop
X.stabn 68,0,39,LM11
XLM11:
X call .udiv,0
X nop
X mov %o0,%o1
X sethi %hi(LC4),%o0
X or %lo(LC4),%o0,%o0
X mov %o1,%o1
X call _printf,0
X nop
X.stabn 68,0,40,LM12
XLM12:
X call .div,0
X nop
X mov %o0,%o1
X sethi %hi(LC5),%o0
X or %lo(LC5),%o0,%o0
X mov %o1,%o1
X call _printf,0
X nop
X.stabn 68,0,41,LM13
XLM13:
X call .div,0
X nop
X mov %o0,%o1
X sethi %hi(LC5),%o0
X or %lo(LC5),%o0,%o0
X mov %o1,%o1
X call _printf,0
X nop
X.stabn 68,0,43,LM14
XLM14:
X mov 32,%o4
X st %o4,[%fp-36]
X.stabn 68,0,44,LM15
XLM15:
X ld [%fp-36],%o0
X add %o0,5,%o0
X st %o0,[%fp-44]
X.stabn 68,0,45,LM16
XLM16:
X call .div,0
X nop
X mov %o0,%o0
X st %o0,[%fp-52]
X.stabn 68,0,46,LM17
XLM17:
X sethi %hi(LC6),%o0
X or %lo(LC6),%o0,%o0
X ld [%fp-36],%o1
X ld [%fp-44],%o2
X ld [%fp-52],%o3
X call _printf,0
X nop
XLBE2:
X.stabn 68,0,47,LM18
XLM18:
XL1:
X ret
X restore
X.stabs "_iobuf:T18=s20_cnt:/21,0,32;_ptr:/219=*2,32,32;_base:/219,64,32;_bufsiz:/21,96,32;_flag:/26,128,16;_file:/22,144,8;;~;",128,0,0,0
X.stabs "_iobuf:t18",128,0,0,0
X.stabs "main:F1",36,0,0,_main
X.stabs "ti:1",128,0,0,-20
X.stabs "tu:4",128,0,0,-28
X.stabs "ti0:1",128,0,0,-36
X.stabs "ti1:1",128,0,0,-44
X.stabs "ti2:1",128,0,0,-52
X.stabn 192,0,0,LBB2
X.stabn 224,0,0,LBE2
SHAR_EOF
if test 3557 -ne "`wc -c < 'tuck0.s'`"
then
echo shar: error transmitting "'tuck0.s'" '(should have been 3557 characters)'
fi
fi # end of overwriting check
echo shar: extracting "'tuck0.script'" '(1614 characters)'
if test -f 'tuck0.script'
then
echo shar: will not over-write existing file "'tuck0.script'"
else
sed 's/^ X//' << \SHAR_EOF > 'tuck0.script'
XScript started on Thu Jul 6 15:46:01 1989
Xtuck@jason> g++ -g tuck0.c
Xtuck@jason> a.out
X(5 + 32) / 32 evaluates to 1.
X(5 + ti) / ti evaluates to 37.
X(5 + ti) / ti evaluates to 1.
X(5 + tu) / tu evaluates to 37.
X(5 + tu) / tu evaluates to 1.
X37 / 32 evaluates to 1.
X37 / tu evaluates to 24.
X37 / tu evaluates to 1.
X37 / ti evaluates to 24.
X37 / ti evaluates to 1.
Xti0 = 32, ti1 = 37, ti2 = 37
Xtuck@jason> g++ -O tuck0.c
Xg++: Program cc1plus got fatal signal 4.
Xtuck@jason> g++ -v -g tuck0.c
Xg++ version 1.35.1-
X /mu/hedlund1/gnu/lib/SUN4/gcc-cpp -+ -v -undef -D__GNU__ -D__GNUG__ -D__cplusplus -Dsparc -Dsun -Dunix -D__sparc__ -D__sun__ -D__unix__ tuck0.c /tmp/cca09872.cpp
XGNU CPP version 1.35
X /mu/hedlund1/gnu/lib/SUN4/gcc-cc1plus /tmp/cca09872.cpp -quiet -dumpbase tuck0.c -noreg -version -G -o /tmp/cca09872.s
XGNU C++ version 1.35.1- (sparc) compiled by GNU C version 1.35.
X as /tmp/cca09872.s -o tuck0.o
X /mu/hedlund1/gnu/lib/SUN4/gcc-ld++ -C /mu/hedlund1/gnu/lib/SUN4/gcc-crt0+.o tuck0.o -lg++ /mu/hedlund1/gnu/lib/SUN4/gcc-gnulib -lg -lc
Xtuck@jason> echo "CC (AT&T cfront 1.2.1) gives correct output"
XCC (AT&T cfront 1.2.1) gives correct output
Xtuck@jason> CC tuck0.c
Xtuck@jason> a.out
X(5 + 32) / 32 evaluates to 1.
X(5 + ti) / ti evaluates to 1.
X(5 + ti) / ti evaluates to 1.
X(5 + tu) / tu evaluates to 1.
X(5 + tu) / tu evaluates to 1.
X37 / 32 evaluates to 1.
X37 / tu evaluates to 1.
X37 / tu evaluates to 1.
X37 / ti evaluates to 1.
X37 / ti evaluates to 1.
Xti0 = 32, ti1 = 37, ti2 = 1
Xtuck@jason> g++ -g -S tuck0.c
Xtuck@jason> ^D
Xscript done on Thu Jul 6 15:48:22 1989
SHAR_EOF
if test 1614 -ne "`wc -c < 'tuck0.script'`"
then
echo shar: error transmitting "'tuck0.script'" '(should have been 1614 characters)'
fi
fi # end of overwriting check
# End of shell archive
exit 0