This is the mail archive of the
gcc-prs@gcc.gnu.org
mailing list for the GCC project.
optimization/9771: wrong ebp optimisation
- From: Daniel dot Diaz at univ-paris1 dot fr
- To: gcc-gnats at gcc dot gnu dot org
- Date: 20 Feb 2003 11:31:54 -0000
- Subject: optimization/9771: wrong ebp optimisation
- Reply-to: Daniel dot Diaz at univ-paris1 dot fr
>Number: 9771
>Category: optimization
>Synopsis: wrong ebp optimisation
>Confidential: no
>Severity: serious
>Priority: medium
>Responsible: unassigned
>State: open
>Class: wrong-code
>Submitter-Id: net
>Arrival-Date: Thu Feb 20 11:36:01 UTC 2003
>Closed-Date:
>Last-Modified:
>Originator: Daniel Diaz
>Release: gcc version 3.2.2 20030213 (Red Hat Linux 8.0 3.2.2-1)
>Organization:
>Environment:
Linux lima.univ-paris1.fr 2.4.18-18.7.x #1 Wed Nov 13 20:29:30 EST 2002 i686 unknown
>Description:
I use ebp for a global variable B which is a pointer. Inside a function foo():
1) the value of B (ebp) is saved in a local variable 'adr'
2) the object pointed by adr (=B=ebp) is saved in a local variable 'save'.
3) the object pointed by adr is set to the value 123.
4) a function bar() is called which changes B (i.e. ebp).
5) when returning in foo() the object pointed by 'adr' is restored to 'save'.
Unfortunately gcc generates a code that restores the object pointed by ebp (and not adr).
>How-To-Repeat:
use: gcc -o bug bug.c for a correct answer
which gives: x:10 y:20
use: gcc -DREG='"ebp"' -ffixed-ebp -fomit-frame-pointer -mpreferred-stack-boundary=2 -O -o bug bug.c
which gives the wrong result: x:123 y:10
>Fix:
>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/octet-stream; name="bug.c"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="bug.c"
LyogR0NDIGJ1ZyByZXBvcnQuCiAqCiAqIFRoaXMgY29ycmVjdCBjb2RlIGNhbiBiZSBvYnRhaW5l
ZCB3aXRoOgogKiBnY2MgLW8gYnVnIGJ1Zy5jCiAqIAogKiB3aG9zZSBleGVjdXRpb24gZ2l2ZXM6
CiAqIHg6MTAgIHk6MjAKICoKICogVGhlIHdyb25nIGNvZGUgY2FuIGJlIG9idGFpbmVkIHVzaW5n
IGVicCBmb3IgQiBhcyBmb2xsb3dzOgogKiBnY2MgLURSRUc9JyJlYnAiJyAtZmZpeGVkLWVicCAt
Zm9taXQtZnJhbWUtcG9pbnRlciAtbXByZWZlcnJlZC1zdGFjay1ib3VuZGFyeT0yIC1PIC1vIGJ1
ZyBidWcuYwogKgogKiB3aGljaCBnaXZlczoKICogeDoxMjMgIHk6MTAKICoKICogb3RoZXIgYmFk
IGNvZGVzIGluY2x1ZGUgLU8yIC1PMwogKiBvdGhlciBnb29kIGNvZGVzIGluY2x1ZGUgZWJ4IGlu
c3RlYWQgb2YgZWJwIG9yIHdpdGhvdXQgLU8KICovCgojaWZkZWYgUkVHCnJlZ2lzdGVyIGxvbmcg
KkIgIGFzbSAoUkVHKTsKI2Vsc2UKbG9uZyAqQjsKI2VuZGlmCgpsb25nIHggPSAxMDsKbG9uZyB5
ID0gMjA7CgoKdm9pZApiYXIodm9pZCkKewogIEIgPSAmeTsKfQoKCi8qIFRoZSBidWcgaXMgaW4g
dGhpcyBmdW5jdGlvbiwgdGhlIGFzbSBpcyBvYnRhaW5lZCB3aXRoOgogKiBnY2MgLURSRUc9JyJl
YnAiJyAtZmZpeGVkLWVicCAtZm9taXQtZnJhbWUtcG9pbnRlciAtbXByZWZlcnJlZC1zdGFjay1i
b3VuZGFyeT0yIC1PIC1TIGJ1Zy5jIAogKiAKICogZm9vOgogKiAgICAgIHB1c2hsICAgJWVzaQog
KiAgICAgIHB1c2hsICAgJWVieAogKiAgICAgIG1vdmwgICAgKCVlYnApLCAlZXNpCiAqICAgICAg
bW92bCAgICAkMTIzLCAoJWVicCkKICogICAgICBjYWxsICAgIGJhcgogKiAgICAgIG1vdmwgICAg
JWVzaSwgKCVlYnApICAgYnVnOiByZXN0b3JlcyB5IGFuZCBub3QgeCAhISEKICogICAgICBwb3Bs
ICAgICVlYngKICogICAgICBwb3BsICAgICVlc2kKICogICAgICByZXQKICoKICogQSBjb3JyZWN0
IGNvZGUgY2FuIGJlIGV4YW1pbmVkIHVzaW5nIGVieCBpbnN0ZWFkIG9mIGVicDoKICogZ2NjIC1E
UkVHPSciZWJ4IicgLWZmaXhlZC1lYnggLWZvbWl0LWZyYW1lLXBvaW50ZXIgLW1wcmVmZXJyZWQt
c3RhY2stYm91bmRhcnk9MiAtTyAtUyBidWcuYyAKICogZm9vOgogKiAgICAgIHB1c2hsICAgJWVk
aQogKiAgICAgIHB1c2hsICAgJWVzaQogKiAgICAgIG1vdmwgICAgJWVieCwgJWVzaQogKiAgICAg
IG1vdmwgICAgKCVlYngpLCAlZWRpCiAqICAgICAgbW92bCAgICAkMTIzLCAoJWVieCkKICogICAg
ICBjYWxsICAgIGJhcgogKiAgICAgIG1vdmwgICAgJWVkaSwgKCVlc2kpCiAqICAgICAgcG9wbCAg
ICAlZXNpCiAqICAgICAgcG9wbCAgICAlZWRpCiAqICAgICAgcmV0CiAqLwp2b2lkCmZvbygpCnsK
ICBsb25nICphZHIgPSBCOwogIGxvbmcgc2F2ZSA9ICphZHI7CgogICphZHIgPSAxMjM7CgogIGJh
cigpOwoKICAqYWRyID0gc2F2ZTsKfQoKCmludAptYWluKCkKewoKICBCID0gJng7CgogIGZvbygp
OwogIHByaW50ZigieDolZCAgeTolZFxuIiwgeCwgeSk7Cn0KCg==