From mboxrd@z Thu Jan 1 00:00:00 1970 From: don@ikos.com To: gcc-gnats@gcc.gnu.org Cc: don@ikos.com Subject: c++/3834: const volatile G++ bug gcc-2.95.2 sparc-sun-solaris2.5.1 Date: Thu, 26 Jul 2001 10:56:00 -0000 Message-id: <20010726174610.4262.qmail@sourceware.cygnus.com> X-SW-Source: 2001-07/msg00718.html List-Id: >Number: 3834 >Category: c++ >Synopsis: const volatile G++ bug gcc-2.95.2 sparc-sun-solaris2.5.1 >Confidential: no >Severity: serious >Priority: medium >Responsible: unassigned >State: open >Class: wrong-code >Submitter-Id: net >Arrival-Date: Thu Jul 26 10:56:01 PDT 2001 >Closed-Date: >Last-Modified: >Originator: Donald Duncan >Release: gcc version 2.95.2 19991024 (release) >Organization: >Environment: sparc-sun-solaris2.5.1 >Description: The first loop is correct (if nonsensical), The second is correct, but the third should look like the second while it looks like the first! Volatile has been lost and const prevails. In the assembly, the line after .LL46 tests a register but does not update its contents inside the loop (LL46 & next 5 lines of assembly). The second loop (LL48) works correctly as there is a ld instruction getting new data. (This is a 6 line code generation.) The third loop (LL51) does not have the data load instruction like the second loop. (Should be 6 lines but only 5 lines of code.) THIS IS THE BUG I FOUND. I do not know if removing some of the C++ layers in the source will make a difference to the code generated. I simply tried to closely match the actual code in my source. >How-To-Repeat: /hq/master/util/gcc-2.95.2/bin/g++ -save-temps -S -fverbose-asm -Wall -O 3 gccbug.cxx >Fix: >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/octet-stream; name="gccbug.ii" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="gccbug.ii" IyAxICJnY2NidWcuY3h4IgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMSAzIDQKIAog CgogCiAKIAoKIAoKCgoKIAoKCgoKCgojcHJhZ21hIGlkZW50CSJAKCMpc3RkaW8uaAkxLjY5CTk4 LzA3LzEzIFNNSSIJCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvZmVhdHVyZV90ZXN0cy5oIiAxIDMg NAogCgoKCgogCiAKIAoKCgoKI3ByYWdtYSBpZGVudAkiQCgjKWZlYXR1cmVfdGVzdHMuaAkxLjE3 CTk3LzEyLzA0IFNNSSIKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9pc2FfZGVmcy5oIiAxIDMgNAog CgoKCgoKCgojcHJhZ21hIGlkZW50CSJAKCMpaXNhX2RlZnMuaAkxLjE2CTk5LzA1LzI1IFNNSSIK CiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCmV4dGVybiAiQyIgewoKCgogCgoKCgoKCiMgMjE4ICIv dXNyL2luY2x1ZGUvc3lzL2lzYV9kZWZzLmgiIDMgNAoKCiAKCgoKCgoKIAoKCgoKCgogCgoKCgoK CgoKCiAKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKIAoKCgoKCiAKCgoKCgoKCiAKCgoKCgoKCgog CgoKCiMgMzE2ICIvdXNyL2luY2x1ZGUvc3lzL2lzYV9kZWZzLmgiIDMgNAoKCiAKCgoKCgoKCgoK Cgp9CgoKCiMgMTUgIi91c3IvaW5jbHVkZS9zeXMvZmVhdHVyZV90ZXN0cy5oIiAyIDMgNAoKCgpl eHRlcm4gIkMiIHsKCgogCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoK CgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKfQoKCgojIDIyICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMiAzIDQKCiMgMSAiL3Vzci9pbmNs dWRlL3N5cy92YV9saXN0LmgiIDEgMyA0CiAKCgoKCgoKCiNwcmFnbWEgaWRlbnQJIkAoIyl2YV9s aXN0LmgJMS4xMQk5Ny8xMS8yMiBTTUkiCgogCgoKCgoKCgoKCgpleHRlcm4gIkMiIHsKCgoKdHlw ZWRlZiB2b2lkICpfX3ZhX2xpc3Q7CgoKCgoKfQoKCgojIDIzICIvdXNyL2luY2x1ZGUvc3RkaW8u aCIgMiAzIDQKCiMgMSAiL3Vzci9pbmNsdWRlL3N0ZGlvX3RhZy5oIiAxIDMgNAogCgoKCgoKCgoj cHJhZ21hIGlkZW50CSJAKCMpc3RkaW9fdGFnLmgJMS4zCTk4LzA0LzIwIFNNSSIKCgpleHRlcm4g IkMiIHsKCgoKCgoKCgp0eXBlZGVmIHN0cnVjdCBGSUxFICBfX0ZJTEU7CgoKCn0KCgoKIyAyNCAi L3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDIgMyA0CgojIDEgIi91c3IvaW5jbHVkZS9zdGRpb19pbXBs LmgiIDEgMyA0CiAKCgoKCgoKCiNwcmFnbWEgaWRlbnQJIkAoIylzdGRpb19pbXBsLmgJMS44CTk5 LzA2LzMwIFNNSSIKCgoKCmV4dGVybiAiQyIgewoKCgoKCgoKdHlwZWRlZiBpbnQJc3NpemVfdDsJ CSAKCgoKIyAzNiAiL3Vzci9pbmNsdWRlL3N0ZGlvX2ltcGwuaCIgMyA0CgoKc3RydWN0IEZJTEUg CSAKewoKCgoKCXNzaXplX3QJCV9jbnQ7CSAKCXVuc2lnbmVkIGNoYXIJKl9wdHI7CSAKCgl1bnNp Z25lZCBjaGFyCSpfYmFzZTsJIAoJdW5zaWduZWQgY2hhcglfZmxhZzsJIAoJdW5zaWduZWQgY2hh cglfZmlsZTsJIAoJdW5zaWduZWQJX19vcmllbnRhdGlvbjoyOyAgCgl1bnNpZ25lZAlfX2lvbm9s b2NrOjE7CSAKCXVuc2lnbmVkCV9fZmlsbGVyOjU7Cn07CgoKCgp9CgoKCiMgMjUgIi91c3IvaW5j bHVkZS9zdGRpby5oIiAyIDMgNAoKCiAKCgoKCgoKCgpleHRlcm4gIkMiIHsKCgoKCnR5cGVkZWYJ X19GSUxFIEZJTEU7CgoKCgoKCgp0eXBlZGVmIHVuc2lnbmVkIGludAlzaXplX3Q7CQkgCgoKCgog CgoKCgoKdHlwZWRlZglsb25nIGxvbmcJX19sb25nbG9uZ190OwoKCgoKCgoKCgoKCgoKdHlwZWRl ZiBsb25nCQlvZmZfdDsKCgoKCgoKCnR5cGVkZWYgX19sb25nbG9uZ190CW9mZjY0X3Q7CgoKCgoK CnR5cGVkZWYgbG9uZwkJZnBvc190OwoKCgoKCgoKdHlwZWRlZiBfX2xvbmdsb25nX3QJZnBvczY0 X3Q7CgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCmV4dGVybiBGSUxFCV9faW9i WzIwIF07CgoKCgoKCgoKCgoKZXh0ZXJuIHVuc2lnbmVkIGNoYXIJIF9zaWJ1ZltdLCBfc29idWZb XTsKCgogCiMgMjI3ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMyA0CgoKCmV4dGVybiB1bnNpZ25l ZCBjaGFyCSpfYnVmZW5kdGFiW107CmV4dGVybiBGSUxFCQkqX2xhc3RidWY7CgoKIAojIDI1NyAi L3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMgNAoKCgoKZXh0ZXJuIGludAlyZW1vdmUoY29uc3QgY2hh ciAqKTsKZXh0ZXJuIGludAlyZW5hbWUoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwpleHRl cm4gRklMRQkqdG1wZmlsZSh2b2lkKTsKZXh0ZXJuIGNoYXIJKnRtcG5hbShjaGFyICopOwoKCgpl eHRlcm4gaW50CWZjbG9zZShGSUxFICopOwpleHRlcm4gaW50CWZmbHVzaChGSUxFICopOwpleHRl cm4gRklMRQkqZm9wZW4oY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwpleHRlcm4gRklMRQkq ZnJlb3Blbihjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgRklMRSAqKTsKZXh0ZXJuIHZvaWQJ c2V0YnVmKEZJTEUgKiwgY2hhciAqKTsKCgpleHRlcm4gdm9pZCBzZXRidWZmZXIoRklMRSAqLCBj aGFyICosIHNpemVfdCk7CmV4dGVybiBpbnQgc2V0bGluZWJ1ZihGSUxFICopOwoKZXh0ZXJuIGlu dAlzZXR2YnVmKEZJTEUgKiwgY2hhciAqLCBpbnQsIHNpemVfdCk7CiAKZXh0ZXJuIGludAlmcHJp bnRmKEZJTEUgKiwgY29uc3QgY2hhciAqLCAuLi4pOwogCmV4dGVybiBpbnQJZnNjYW5mKEZJTEUg KiwgY29uc3QgY2hhciAqLCAuLi4pOwogCmV4dGVybiBpbnQJcHJpbnRmKGNvbnN0IGNoYXIgKiwg Li4uKTsKIApleHRlcm4gaW50CXNjYW5mKGNvbnN0IGNoYXIgKiwgLi4uKTsKCgoKIApleHRlcm4g aW50CXNucHJpbnRmKGNoYXIgKiwgc2l6ZV90LCBjb25zdCBjaGFyICosIC4uLik7CgogCmV4dGVy biBpbnQJc3ByaW50ZihjaGFyICosIGNvbnN0IGNoYXIgKiwgLi4uKTsKIApleHRlcm4gaW50CXNz Y2FuZihjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgLi4uKTsKZXh0ZXJuIGludAl2ZnByaW50 ZihGSUxFICosIGNvbnN0IGNoYXIgKiwgX192YV9saXN0KTsKZXh0ZXJuIGludAl2cHJpbnRmKGNv bnN0IGNoYXIgKiwgX192YV9saXN0KTsKCgoKZXh0ZXJuIGludAl2c25wcmludGYoY2hhciAqLCBz aXplX3QsIGNvbnN0IGNoYXIgKiwgX192YV9saXN0KTsKCmV4dGVybiBpbnQJdnNwcmludGYoY2hh ciAqLCBjb25zdCBjaGFyICosIF9fdmFfbGlzdCk7CmV4dGVybiBpbnQJZmdldGMoRklMRSAqKTsK ZXh0ZXJuIGNoYXIJKmZnZXRzKGNoYXIgKiwgaW50LCBGSUxFICopOwpleHRlcm4gaW50CWZwdXRj KGludCwgRklMRSAqKTsKZXh0ZXJuIGludAlmcHV0cyhjb25zdCBjaGFyICosIEZJTEUgKik7CmV4 dGVybiBpbnQJZ2V0YyhGSUxFICopOwpleHRlcm4gaW50CWdldGNoYXIodm9pZCk7CmV4dGVybiBj aGFyCSpnZXRzKGNoYXIgKik7CmV4dGVybiBpbnQJcHV0YyhpbnQsIEZJTEUgKik7CmV4dGVybiBp bnQJcHV0Y2hhcihpbnQpOwpleHRlcm4gaW50CXB1dHMoY29uc3QgY2hhciAqKTsKZXh0ZXJuIGlu dAl1bmdldGMoaW50LCBGSUxFICopOwpleHRlcm4gc2l6ZV90CWZyZWFkKHZvaWQgKiwgc2l6ZV90 LCBzaXplX3QsIEZJTEUgKik7CmV4dGVybiBzaXplX3QJZndyaXRlKGNvbnN0IHZvaWQgKiwgc2l6 ZV90LCBzaXplX3QsIEZJTEUgKik7CmV4dGVybiBpbnQJZmdldHBvcyhGSUxFICosIGZwb3NfdCAq KTsKZXh0ZXJuIGludAlmc2VlayhGSUxFICosIGxvbmcsIGludCk7CmV4dGVybiBpbnQJZnNldHBv cyhGSUxFICosIGNvbnN0IGZwb3NfdCAqKTsKZXh0ZXJuIGxvbmcJZnRlbGwoRklMRSAqKTsKZXh0 ZXJuIHZvaWQJcmV3aW5kKEZJTEUgKik7CmV4dGVybiB2b2lkCWNsZWFyZXJyKEZJTEUgKik7CmV4 dGVybiBpbnQJZmVvZihGSUxFICopOwpleHRlcm4gaW50CWZlcnJvcihGSUxFICopOwpleHRlcm4g dm9pZAlwZXJyb3IoY29uc3QgY2hhciAqKTsKCgpleHRlcm4gaW50CV9fZmlsYnVmKEZJTEUgKik7 CmV4dGVybiBpbnQJX19mbHNidWYoaW50LCBGSUxFICopOwoKCiAKCgoKCgpleHRlcm4gRklMRQkq ZmRvcGVuKGludCwgY29uc3QgY2hhciAqKTsKZXh0ZXJuIGNoYXIJKmN0ZXJtaWQoY2hhciAqKTsK ZXh0ZXJuIGludAlmaWxlbm8oRklMRSAqKTsKCgoKIAoKCiMgMzU4ICIvdXNyL2luY2x1ZGUvc3Rk aW8uaCIgMyA0CgoKIAoKCgoKZXh0ZXJuIEZJTEUJKnBvcGVuKGNvbnN0IGNoYXIgKiwgY29uc3Qg Y2hhciAqKTsKZXh0ZXJuIGNoYXIJKmN1c2VyaWQoY2hhciAqKTsKZXh0ZXJuIGNoYXIJKnRlbXBu YW0oY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwpleHRlcm4gaW50CWdldG9wdChpbnQsIGNo YXIgKmNvbnN0ICosIGNvbnN0IGNoYXIgKik7CgpleHRlcm4gaW50CWdldHN1Ym9wdChjaGFyICoq LCBjaGFyICpjb25zdCAqLCBjaGFyICoqKTsKCmV4dGVybiBjaGFyCSpvcHRhcmc7CmV4dGVybiBp bnQJb3B0aW5kLCBvcHRlcnIsIG9wdG9wdDsKZXh0ZXJuIGludAlnZXR3KEZJTEUgKik7CmV4dGVy biBpbnQJcHV0dyhpbnQsIEZJTEUgKik7CmV4dGVybiBpbnQJcGNsb3NlKEZJTEUgKik7CgoKCiAK CgoKZXh0ZXJuIGludAlmc2Vla28oRklMRSAqLCBvZmZfdCwgaW50KTsKZXh0ZXJuIG9mZl90CWZ0 ZWxsbyhGSUxFICopOwoKCiAKCgoKCgpleHRlcm4gRklMRQkqZm9wZW42NChjb25zdCBjaGFyICos IGNvbnN0IGNoYXIgKik7CmV4dGVybiBGSUxFCSpmcmVvcGVuNjQoY29uc3QgY2hhciAqLCBjb25z dCBjaGFyICosIEZJTEUgKik7CmV4dGVybiBGSUxFCSp0bXBmaWxlNjQodm9pZCk7CmV4dGVybiBp bnQJZmdldHBvczY0KEZJTEUgKiwgZnBvczY0X3QgKik7CmV4dGVybiBpbnQJZnNldHBvczY0KEZJ TEUgKiwgY29uc3QgZnBvczY0X3QgKik7CmV4dGVybiBpbnQJZnNlZWtvNjQoRklMRSAqLCBvZmY2 NF90LCBpbnQpOwpleHRlcm4gb2ZmNjRfdAlmdGVsbG82NChGSUxFICopOwoKCiMgNTE1ICIvdXNy L2luY2x1ZGUvc3RkaW8uaCIgMyA0CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyA1Njcg Ii91c3IvaW5jbHVkZS9zdGRpby5oIiAzIDQKCgoKCgp9CgoKCiMgNSAiZ2NjYnVnLmN4eCIgMgoK CnR5cGVkZWYgc3RydWN0ICBSZWdTdHJ1Y3QKewogICAgY29uc3QgICAgICAgICAgICAgICBpbnQg Y2hpcFJlZzsgICAgICAgICAgICAgCiAgICAgICAgICAgIHZvbGF0aWxlICAgIGludCBjb250cm9s UmVnOyAgICAgICAgICAKICAgIGNvbnN0ICAgdm9sYXRpbGUgICAgaW50IHN0YXR1c1JlZzsgICAg ICAgICAgIAp9OwoKY2xhc3MgRGV2aWNlCnsKcHVibGljOgogICAgc3RydWN0ICBSZWdTdHJ1Y3Qq ICB0aGVSZWc7CgogICBEZXZpY2UgKCkgOgogICB0aGVSZWcgKCAoc3RydWN0ICBSZWdTdHJ1Y3Qq KSAweDAxMjM0NTY3KSAgICAgCiAgIHt9OwoKaW5saW5lIGJvb2wgaXNDaGlwUmVnICgpICAgIHsg cmV0dXJuIHRoZVJlZy0+Y2hpcFJlZyAmIDB4MTAwOyB9OwppbmxpbmUgYm9vbCBpc0NvbnRyb2xS ZWcgKCkgeyByZXR1cm4gdGhlUmVnLT5jb250cm9sUmVnICYgMHgxMDA7IH07CmlubGluZSBib29s IGlzU3RhdHVzUmVnICgpICB7IHJldHVybiB0aGVSZWctPnN0YXR1c1JlZyAmIDB4MTAwOyB9Owp9 OwoKY2xhc3MgU3lzdGVtCnsKICAgIERldmljZSogdGhlRGV2OwpwdWJsaWM6CiAgICBTeXN0ZW0g KCkgOgogICAgdGhlRGV2IChuZXcgRGV2aWNlKQogICAgeyB9OwoKICAgIHZvaWQgQnVnVGVzdCh2 b2lkKTsKfTsKCnZvaWQgU3lzdGVtOjpCdWdUZXN0ICh2b2lkKQp7CiAgICBpbnQgICAgIGk7CiAg ICBwcmludGYgKCJIZXJlIHdlIGdvIVxuIik7CgogICAgcHJpbnRmICgiVHJ5aW5nIFwnY29uc3Qg Q2hpcFJlZ1wnXG4iKTsKICAgIGZvciAoaSA9IDEwMDsgdGhlRGV2LT5pc0NoaXBSZWcoKTsgaS0t KQogICAgICAgIGlmIChpID09IDApCiAgICAgICAgewogICAgICAgICAgICBwcmludGYgKCJjb25z dCBDaGlwUmVnIEZhaWxlZFxuIik7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KCiAgICBw cmludGYgKCJUcnlpbmcgXCd2b2xhdGlsZSBjb250cm9sUmVnXCdcbiIpOwogICAgZm9yIChpID0g MTAwOyB0aGVEZXYtPmlzQ29udHJvbFJlZygpOyBpLS0pCiAgICAgICAgaWYgKGkgPT0gMCkKICAg ICAgICB7CiAgICAgICAgICAgIHByaW50ZiAoInZvbGF0aWxlIENvbnRyb2xSZWcgRmFpbGVkXG4i KTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQoKICAgIHByaW50ZiAoIlRyeWluZyBcJ2Nv bnN0IHZvbGF0aWxlIHN0YXR1c1JlZ1wnXG4iKTsKICAgIGZvciAoaSA9IDEwMDsgdGhlRGV2LT5p c1N0YXR1c1JlZygpOyBpLS0pCiAgICAgICAgaWYgKGkgPT0gMCkKICAgICAgICB7CiAgICAgICAg ICAgIHByaW50ZiAoImNvbnN0IHZvbGF0aWxlIHN0YXR1c1JlZyBGYWlsZWRcbiIpOwogICAgICAg ICAgICBicmVhazsKICAgICAgICB9Cn0KCgo=