public inbox for gcc-prs@sourceware.org
help / color / mirror / Atom feed
* c++/7322: Code to Compute Numeric Limits "runs away" when -O<any> used
@ 2002-07-15 19:56 lprimak
  0 siblings, 0 replies; 2+ messages in thread
From: lprimak @ 2002-07-15 19:56 UTC (permalink / raw)
  To: gcc-gnats


>Number:         7322
>Category:       c++
>Synopsis:       Code to Compute Numeric Limits "runs away" when -O<any> used
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Mon Jul 15 19:56:00 PDT 2002
>Closed-Date:
>Last-Modified:
>Originator:     Lenny Primak
>Release:        gcc version 3.1
>Organization:
>Environment:
(the OS is probably irrelevant)
Solaris 8/x86, Oct. 01 release,
gcc 3.1 as posted on Sunfreeware.com

ash-2.03$ gcc -v
Reading specs from /usr/local/lib/gcc-lib/i386-pc-solaris2.8/3.1/specs
Configured with: ../configure --with-as=/usr/ccs/bin/as --with-ld=/usr/ccs/bin/ld --disable-nls
Thread model: posix
bash-2.03$ gcc -v
Reading specs from /usr/local/lib/gcc-lib/i386-pc-solaris2.8/3.1/specs
Configured with: ../configure --with-as=/usr/ccs/bin/as --with-ld=/usr/ccs/bin/ld --disable-nls
Thread model: posix
gcc version 3.1
>Description:
The code works correctly when not using the optimize (-O) switch.
Incorrect code is produced that causes the process
to "run away" and eats 100% of the cpu when any kind
of optimization switch is used.
>How-To-Repeat:
bash-2.03$ c++ -O1 limits.cpp 
bash-2.03$ ./a.out
:
#undef _LPLIM_LIMITS
#define _LPLIM_CHAR_BIT 8
#define _LPLIM_BOOL_MIN !!0 /* sizeof (bool) = 1 */
#define _LPLIM_BOOL_MAX !0
#define _LPLIM_CHAR_MAX 127 /* sizeof (char) = 1 */
#define _LPLIM_CHAR_MIN (-_LPLIM_CHAR_MAX - 1)
(hangs/runs away here) ^C
bash-2.03$ 
>Fix:
None Available
>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/octet-stream; name="limits.cpp"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="limits.cpp"

Ly8gY29tcHV0aW5nIGludGVncmFsIGxpbWl0cwoKIyAgaW5jbHVkZSA8bGltaXRzLmg+CgojaW5j
bHVkZSA8c3RkaW8uaD4KCgp0ZW1wbGF0ZTxjbGFzcyBUPgp2b2lkIHByaW50X2xpbWl0IChUIG4s
IGNvbnN0IGNoYXIgKnBmeCwgY29uc3QgY2hhciAqc2Z4LAogICAgICAgICAgICAgICAgICBib29s
IGlzX21heCwgY29uc3QgY2hhciAqdHlwZSkKewogICAgLy8gcHJldmVudHMgbWVhbmluZ2xlc3Mg
Y29tcGFyaXNvbiB3YXJuaW5ncyB3aGVuIFQgaXMgdW5zaWduZWQKICAgIC8vIGUuZy4sIGZvciAo
biA8IDApCiAgICAvKiBub3QgY29uc3QgKi8gVCB6ZXJvID0gVCAoMCk7CgogICAgY2hhciBkZWMg
WzY0XSA9IHsgMCB9OwoKICAgIGNoYXIqIHBkZWMgPSBkZWMgKyBzaXplb2YgZGVjIC0gMTsKCiAg
ICBjb25zdCBjaGFyIGRpZ2l0IFtdID0geyAnMCcsJzEnLCcyJywnMycsJzQnLCc1JywnNicsJzcn
LCc4JywnOScgfTsKCiAgICBpZiAoaXNfbWF4IHx8IG4gPj0gemVybykgewoKICAgICAgICBUIHRk
ZWMgPSBuOwoKICAgICAgICAqLS1wZGVjID0gZGlnaXQgW3RkZWMgJSAxMF07CiAgICAgICAgd2hp
bGUgKHRkZWMgLz0gMTApCiAgICAgICAgICAgICotLXBkZWMgPSBkaWdpdCBbdGRlYyAlIDEwXTsK
ICAgIH0KCiAgICBpZiAoaXNfbWF4KSB7CiAgICAgICAgcHJpbnRmICgiI2RlZmluZSBfTFBMSU1f
JXNfTUFYICVzJXMiLCBwZngsIHBkZWMsIHNmeCk7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBp
ZiAobiA8IHplcm8pIHsKICAgICAgICAgICAgcHJpbnRmICgiI2RlZmluZSBfTFBMSU1fJXNfTUlO
ICgtX0xQTElNXyVzX01BWCAtIDElcykiLAogICAgICAgICAgICAgICAgICAgIHBmeCwgcGZ4LCBz
ZngpOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgcHJpbnRmICgiI2RlZmlu
ZSBfTFBMSU1fJXNfTUlOICVzIiwgcGZ4LCBwZGVjKTsKICAgICAgICB9CiAgICB9CgogICAgc3Rh
dGljIGludCBkb25lOwoKICAgIGlmICgwID09IGRvbmUrKykKICAgICAgICBwcmludGYgKCIgLyog
c2l6ZW9mICglcykgPSAldSAqL1xuIiwgdHlwZSwgdW5zaWduZWQgKHNpemVvZiAoVCkpKTsKICAg
IGVsc2UKICAgICAgICBwcmludGYgKCJcbiIpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIFQ+ClQgZm9v
IChUIG9uZSwgVCBtaW4pCnsKICAgIC8vIHByZXZlbnRzIG92ZXJ6ZWFsb3VzIGdjYyBvcHRpbWl6
ZXIgZnJvbSBpbnZva2luZwogICAgLy8gdW5kZWZpbmVkIGJlaGF2aW9yIG9uIHNpZ25lZCBpbnRl
Z2VyIG92ZXIvdW5kZXJmbG93CiAgICBmb3IgKFQgdG1wOyA7IC0tbWluKSB7CiAgICAgICAgdG1w
ID0gbWluIC0gb25lOwogICAgICAgIGlmICh0bXAgPj0gbWluKQogICAgICAgICAgICBicmVhazsK
ICAgIH0KCiAgICByZXR1cm4gbWluOwp9CgoKdGVtcGxhdGUgPGNsYXNzIFQ+CnZvaWQgY29tcHV0
ZV9saW1pdHMgKFQsIGNvbnN0IGNoYXIgKnBmeCwgY29uc3QgY2hhciAqc2Z4LCBjb25zdCBjaGFy
ICp0eXBlKQp7CiAgICBUIHplcm8gPSBUICgwKTsKICAgIFQgbWluICA9IFQgKC0xKTsKICAgIFQg
bWF4ICA9IFQgKDEpOwogICAgVCBvbmUgID0gVCAoMSk7CgogICAgaW50IGlzX3NpZ25lZCA9IFQg
KG1pbiAtIFQgKDEpKSA8IHplcm87CgogICAgaWYgKCFpc19zaWduZWQpCiAgICAgICAgbWF4ID0g
bWluOwoKICAgIGZvciAoOyBUIChtYXggKiAyKSA+IG1heDsgbWF4ICo9IDIpOwogICAgZm9yIChU
IG4gPSBtYXggLyA0OyBuOyApIHsKICAgICAgICBpZiAoVCAobWF4ICsgbikgPCBtYXgpIHsKICAg
ICAgICAgICAgaWYgKG4gPiAyKQogICAgICAgICAgICAgICAgbiAvPSAyOwogICAgICAgICAgICBl
bHNlIGlmIChUIChtYXggKyAxKSA+IG1heCkKICAgICAgICAgICAgICAgIG4gPSAxOwogICAgICAg
ICAgICBlbHNlCiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgZWxzZQog
ICAgICAgICAgICBtYXggKz0gbjsKICAgIH0KCiAgICBwcmludF9saW1pdCAobWF4LCBwZngsIHNm
eCwgdHJ1ZSwgdHlwZSk7CgogICAgbWluID0gLW1heDsKCiAgICAvLyBjb21wdXRlIGEgbWluaW11
bQogICAgZm9yICg7IFQgKG1pbiAqIDIpIDwgbWluOyBtaW4gKj0gMik7CgogICAgLy8gd29ya2lu
ZyBhcm91bmQgYSBnY2Mgb3B0aW1pemVyICJmZWF0dXJlIiAoUFIgIzI2MjExKQogICAgLy8gc2ln
bmVkIGludGVnZXIgb3ZlcmZsb3cgaXMgdW5kZWZpbmVkIGJlaGF2aW9yCiAgICAvLyBmb3IgKDsg
VCAobWluIC0gMSkgPCBtaW47IG1pbiAtPSAxKTsKICAgIG1pbiA9IGZvbyAob25lLCBtaW4pOwoK
ICAgIHByaW50X2xpbWl0PFQ+IChtaW4sIHBmeCwgc2Z4LCBmYWxzZSwgdHlwZSk7Cn0KCgp2b2lk
IGNvbXB1dGVfY2hhcl9iaXRzICgpCnsKICAgIHVuc2lnbmVkIGJpdHMgPSAwOwoKICAgIGZvciAo
dW5zaWduZWQgY2hhciBjID0gJ1wwMSc7IGM7IGMgPDw9IDEsICsrYml0cyk7CgogICAgcHJpbnRm
ICgiI2RlZmluZSBfTFBMSU1fQ0hBUl9CSVQgJWRcbiIsIGJpdHMpOwp9CgoKaW50IG1haW4gKCkK
ewojaWZuZGVmIF9MUExJTV9VU0VfQ09ORklHCgogICAgcHJpbnRmICgiOlxuI3VuZGVmIF9MUExJ
TV9MSU1JVFNcbiIpOwoKI2VuZGlmICAgLy8gX0xQTElNX1VTRV9DT05GSUcKCiAgICBjb21wdXRl
X2NoYXJfYml0cyAoKTsKCiNpZm5kZWYgX0xQTElNX05PX0JPT0wKCiAgICBwcmludGYgKCIjZGVm
aW5lIF9MUExJTV9CT09MX01JTiAhITAgLyogc2l6ZW9mIChib29sKSA9ICV1ICovXG4iLAogICAg
ICAgICAgICBzaXplb2YgKGJvb2wpKTsKICAgIHByaW50ZiAoIiNkZWZpbmUgX0xQTElNX0JPT0xf
TUFYICEwXG4iKTsKCiNlbmRpZiAgIC8vIF9MUExJTV9OT19CT09MCgogICAgY29tcHV0ZV9saW1p
dHMgKChjaGFyKTAsICJDSEFSIiwgIiIsICJjaGFyIik7CiAgICBjb21wdXRlX2xpbWl0cyAoKHNp
Z25lZCBjaGFyKTAsICJTQ0hBUiIsICIiLCAic2lnbmVkIGNoYXIiKTsKICAgIGNvbXB1dGVfbGlt
aXRzICgodW5zaWduZWQgY2hhcikwLCAiVUNIQVIiLCAiVSIsICJ1bnNpZ25lZCBjaGFyIik7Cgog
ICAgY29tcHV0ZV9saW1pdHMgKChzaG9ydCkwLCAiU0hSVCIsICIiLCAic2hvcnQiKTsKICAgIGNv
bXB1dGVfbGltaXRzICgodW5zaWduZWQgc2hvcnQpMCwgIlVTSFJUIiwgIlUiLCAidW5zaWduZWQg
c2hvcnQiKTsKCiAgICBjb21wdXRlX2xpbWl0cyAoKGludCkwLCAiSU5UIiwgIiIsICJpbnQiKTsK
ICAgIGNvbXB1dGVfbGltaXRzICgodW5zaWduZWQgaW50KTAsICJVSU5UIiwgIlUiLCAidW5zaWdu
ZWQgaW50Iik7CgogICAgY29tcHV0ZV9saW1pdHMgKChsb25nKTAsICJMT05HIiwgIkwiLCAibG9u
ZyIpOwogICAgY29tcHV0ZV9saW1pdHMgKCh1bnNpZ25lZCBsb25nKTAsICJVTE9ORyIsICJVTCIs
ICJ1bnNpZ25lZCBsb25nIik7CgojaWZuZGVmIF9MUExJTV9OT19MT05HX0xPTkcKCiAgICBjb21w
dXRlX2xpbWl0cyAoKGxvbmcgbG9uZykwLCAiTExPTkciLCAiTEwiLCAibG9uZyBsb25nIik7CiAg
ICBjb21wdXRlX2xpbWl0cyAoKHVuc2lnbmVkIGxvbmcgbG9uZykwLCAiVUxMT05HIiwgIlVMTCIs
CiAgICAgICAgICAgICAgICAgICAgInVuc2lnbmVkIGxvbmcgbG9uZyIpOwoKI2VuZGlmICAgLy8g
X0xQTElNX05PX0xPTkdfTE9ORwoKI2lmIGRlZmluZWQgKF9XSU4zMikgfHwgZGVmaW5lZCAoX1dJ
TjY0KQoKICAgIGNvbXB1dGVfbGltaXRzICgoX19pbnQ2NCkwLCAiTExPTkciLCAiIiwgIl9faW50
NjQiKTsKICAgIGNvbXB1dGVfbGltaXRzICgodW5zaWduZWQgX19pbnQ2NCkwLCAiVUxMT05HIiwg
IkwiLAogICAgICAgICAgICAgICAgICAgICJ1bnNpZ25lZCBfX2ludDY0Iik7CgoKI2VuZGlmICAg
Ly8gX1dJTjMyIHx8IFdJTjY0CgojaWZuZGVmIF9MUExJTV9OT19XQ0hBUl9UCgogICAgY29tcHV0
ZV9saW1pdHMgKCh3Y2hhcl90KTAsICJXQ0hBUl9UIiwgIiIsICJ3Y2hhcl90Iik7CgojZW5kaWYg
ICAvLyBfTFBMSU1fTk9fV0NIQVJfVAoKI2lmZGVmIE1CX0xFTl9NQVgKCiAgICBwcmludGYgKCIj
ZGVmaW5lIF9MUExJTV9NQl9MRU5fTUFYICVkIC8qIGxpYmMgdmFsdWUgKi9cbiIsIE1CX0xFTl9N
QVgpOwoKI2Vsc2UKCiAgICBwcmludGYgKCIjZGVmaW5lIF9MUExJTV9NQl9MRU5fTUFYICVkIC8q
IGd1ZXNzICovXG4iLCA4KTsKCiNlbmRpZiAgIC8vIE1CX0xFTl9NQVgKCiAgICByZXR1cm4gMDsK
fQo=


^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: c++/7322: Code to Compute Numeric Limits "runs away" when -O<any> used
@ 2002-07-16  1:41 nathan
  0 siblings, 0 replies; 2+ messages in thread
From: nathan @ 2002-07-16  1:41 UTC (permalink / raw)
  To: gcc-bugs, gcc-prs, lprimak, nobody

Synopsis: Code to Compute Numeric Limits "runs away" when -O<any> used

State-Changed-From-To: open->closed
State-Changed-By: nathan
State-Changed-When: Tue Jul 16 01:41:42 2002
State-Changed-Why:
    The code is ill formed.
    There are tests such as
    	if (T (max + 1) > max)
    where max & T are signed types. [5]/5 says that
    if the result is not in the range if representable values,
    the behaviour is undefined. gcc implements modulo arithmetic
    for unsigned types, and undefined behaviour for signed types.
    The optimized therefore knows that max + 1 must always
    be greater than max.

http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&pr=7322


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2002-07-16  8:41 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2002-07-15 19:56 c++/7322: Code to Compute Numeric Limits "runs away" when -O<any> used lprimak
2002-07-16  1:41 nathan

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).