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]

optimization/9771: wrong ebp optimisation


>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==


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