This is the mail archive of the gcc-prs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

c/5431: possible gcc 2.96 error in simple arithmetic statement w/ 16 & 32 bit values



>Number:         5431
>Category:       c
>Synopsis:       possible gcc 2.96 error in simple arithmetic statement w/ 16 & 32 bit values
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Fri Jan 18 18:36:01 PST 2002
>Closed-Date:
>Last-Modified:
>Originator:     Kevin Steege
>Release:        GCC 2.96
>Organization:
>Environment:
Red Had Linux 7.1
>Description:
Not sure if this is a true compiler bug or not, but the following problem occurred when we migrated to Linux RedHat 7.1 which came with gcc 2.96.  The problem did not occur with RedHat 6.2 which came with gcc 2.91.  
The code line : 
  Result = (((my_ushort + 2) * 2) - sizeof (my_8_struct) - 4) / 2;
where Result is a unsigned 32 bit value, my_ushort is an unsigned 16 bit value set to 924, and my_8_struct is an 8 byte structure
Produces the correct result with gcc 2.91 : 
(((my_ushort + 2) * 2) - sizeof (my_8_struct) - 4) / 2 =  920 = 0x398
But an incorrect value with gcc 2.96 : 
(((my_ushort + 2) * 2) - sizeof (my_8_struct) - 4) / 2 = 2147484568 = 0x80000398

Obviously there is a problem with the way the compiler casts the values between 16 bit and 32 bit integers, or at least with the way I believe the compiler should cast the values.
>How-To-Repeat:
Compile attached file mytest.c & run : 
gcc mytest.c
./a.out
>Fix:
The sample program contains several similar lines which work around the problem.
>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/octet-stream; name="mytest.c"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="mytest.c"

aW50IG1haW4gKCkKewogIHR5cGVkZWYgc3RydWN0IAogIHsKICAgIGNoYXIgQVs4XTsKICB9IG15
Xzhfc3RydWN0OwoKICB0eXBlZGVmIHN0cnVjdCAKICB7CiAgICBjaGFyIEFbNF07CiAgfSBteV80
X3N0cnVjdDsKCiAgdW5zaWduZWQgc2hvcnQgbXlfdXNob3J0OwogIHVuc2lnbmVkIGxvbmcgIG15
X3Vsb25nOwoKICB1bnNpZ25lZCBsb25nIFJlc3VsdDsKCiAgCiAgbXlfdXNob3J0ID0gOTI0Owog
IG15X3Vsb25nICA9IDkyNDsKCiAgcHJpbnRmICgiKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKiBURVNUIEJFR0lOICoqKioqKioqXG4iKTsKCgogIHByaW50ZiAoIm15X3Vz
aG9ydCA9ICV1LCBteV91bG9uZyA9ICV1XG5zaXplb2YgKG15XzRfc3RydWN0KSA9ICV1LCAiCiAg
ICAgICAgICAic2l6ZW9mIChteV84X3N0cnVjdCkgPSAldVxuIiwKICAgICAgICAgIG15X3VzaG9y
dCwgbXlfdWxvbmcsIHNpemVvZiAobXlfNF9zdHJ1Y3QpLCBzaXplb2YgKG15Xzhfc3RydWN0KSk7
CgogIHByaW50ZiAoIlxuXG4gVEVTVElORyB3aXRoIG15X3VzaG9ydCAmIG15XzRfc3RydWN0IFxu
Iik7CgogIFJlc3VsdCA9ICgoKG15X3VzaG9ydCArIDIpICogMikgLSBzaXplb2YgKG15XzRfc3Ry
dWN0KSAtIDQpOwogIHByaW50ZiAoIigoKG15X3VzaG9ydCArIDIpICogMikgLSBzaXplb2YgKG15
XzRfc3RydWN0KSAtIDQpICAgICA9ICU0dSA9ICIKICAgICAgICAgICIweCVYXG4iLCBSZXN1bHQs
IFJlc3VsdCk7CgogIFJlc3VsdCA9ICgoKG15X3VzaG9ydCArIDIpICogMikgLSBzaXplb2YgKG15
XzRfc3RydWN0KSAtIDQpIC8gMjsKICBwcmludGYgKCIoKChteV91c2hvcnQgKyAyKSAqIDIpIC0g
c2l6ZW9mIChteV80X3N0cnVjdCkgLSA0KSAvIDIgPSAlNHUgPSAiCiAgICAgICAgICAiMHglWFxu
IiwgUmVzdWx0LCBSZXN1bHQpOwoKICBSZXN1bHQgPSAoKChteV91c2hvcnQgKyAyKSAqIDIpIC0g
NCAtIDQpIC8gMjsKICBwcmludGYgKCIoKChteV91c2hvcnQgKyAyKSAqIDIpIC0gNCAtIDQpIC8g
MiAgICAgICAgICAgICAgICAgICAgPSAlNHUgPSAiCiAgICAgICAgICAiMHglWFxuIiwgUmVzdWx0
LCBSZXN1bHQpOwoKCiAgcHJpbnRmICgiXG5cbiBURVNUSU5HIHdpdGggbXlfdWxvbmcgJiBteV84
X3N0cnVjdCBcbiIpOwoKICBSZXN1bHQgPSAoKChteV91bG9uZyArIDIpICogMikgLSBzaXplb2Yg
KG15Xzhfc3RydWN0KSAtIDQpOwogIHByaW50ZiAoIigoKG15X3Vsb25nICsgMikgKiAyKSAtIHNp
emVvZiAobXlfOF9zdHJ1Y3QpIC0gNCkgICAgICA9ICU0dSA9ICIKICAgICAgICAgICIweCVYXG4i
LCBSZXN1bHQsIFJlc3VsdCk7CgogIFJlc3VsdCA9ICgoKG15X3Vsb25nICsgMikgKiAyKSAtIHNp
emVvZiAobXlfOF9zdHJ1Y3QpIC0gNCkgLyAyOwogIHByaW50ZiAoIigoKG15X3Vsb25nICsgMikg
KiAyKSAtIHNpemVvZiAobXlfOF9zdHJ1Y3QpIC0gNCkgLyAyICA9ICU0dSA9ICIKICAgICAgICAg
ICIweCVYXG4iLCBSZXN1bHQsIFJlc3VsdCk7CgogIFJlc3VsdCA9ICgoKG15X3Vsb25nICsgMikg
KiAyKSAtIDggLSA0KSAvIDI7CiAgcHJpbnRmICgiKCgobXlfdWxvbmcgKyAyKSAqIDIpIC0gOCAt
IDQpIC8gMiAgICAgICAgICAgICAgICAgICAgID0gJTR1ID0gIgogICAgICAgICAgIjB4JVhcbiIs
IFJlc3VsdCwgUmVzdWx0KTsKCgogIHByaW50ZiAoIlxuXG4gVEVTVElORyB3aXRoIG15X3VzaG9y
dCAmIG15Xzhfc3RydWN0IFxuIik7CgogIFJlc3VsdCA9ICgoKG15X3VzaG9ydCArIDIpICogMikg
LSBzaXplb2YgKG15Xzhfc3RydWN0KSAtIDQpOwogIHByaW50ZiAoIigoKG15X3VzaG9ydCArIDIp
ICogMikgLSBzaXplb2YgKG15Xzhfc3RydWN0KSAtIDQpICAgICA9ICU0dSA9ICIKICAgICAgICAg
ICIweCVYXG4iLCBSZXN1bHQsIFJlc3VsdCk7CgogIFJlc3VsdCA9ICgoKG15X3VzaG9ydCArIDIp
ICogMikgLSBzaXplb2YgKG15Xzhfc3RydWN0KSAtIDQpIC8gMjsKICBwcmludGYgKCIoKChteV91
c2hvcnQgKyAyKSAqIDIpIC0gc2l6ZW9mIChteV84X3N0cnVjdCkgLSA0KSAvIDIgPSAlNHUgPSAi
CiAgICAgICAgICAiMHglWFxuIiwgUmVzdWx0LCBSZXN1bHQpOwoKICBSZXN1bHQgPSAoKChteV91
c2hvcnQgKyAyKSAqIDIpIC0gOCAtIDQpIC8gMjsKICBwcmludGYgKCIoKChteV91c2hvcnQgKyAy
KSAqIDIpIC0gOCAtIDQpIC8gMiAgICAgICAgICAgICAgICAgICAgPSAlNHUgPSAiCiAgICAgICAg
ICAiMHglWFxuIiwgUmVzdWx0LCBSZXN1bHQpOwpwcmludGYgKCIqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqIFRFU1QgRU5EICoqKioqKioqXG4iKTsKCnJldHVybiAwOwoK
fQoKCg==


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]