c++/2786: erroneous pointer returned by dynamic cast

laurent.morel@isr.thomson-csf.com laurent.morel@isr.thomson-csf.com
Tue May 8 23:46:00 GMT 2001


>Number:         2786
>Category:       c++
>Synopsis:       erroneous pointer returned by dynamic cast
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Tue May 08 23:46:00 PDT 2001
>Closed-Date:
>Last-Modified:
>Originator:     Laurent Morel
>Release:        unknown-1.0
>Organization:
>Environment:
tmp>cat /etc/mandrake-release
Linux Mandrake release 7.2 (Odyssey) for i586 
tmp>gcc -v
Reading specs from /usr/lib/gcc-lib/i586-mandrake-linux/2.95.3/specs
gcc version 2.95.3 19991030 (prerelease)
>Description:
I'm using g++ on GNU/Linux, Mandrake 7.2 distribution.
I've got a problem with a dynamic_cast operator call.

In the case that the result is not NULL, I have a result pointer 
shifted by a 4 bytes offset compared to the originally
allocated object.
It occurs when one of the ancestors classes has no virtual function.
>How-To-Repeat:
cf attached file
>Fix:
make sure that all ancestor classes has at least a
virtual function, for instance : declare all destructors
as virtual
>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/octet-stream; name="Dyncast.c"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="Dyncast.c"

LyoNCkknbSB1c2luZyBnKysgb24gR05VL0xpbnV4LCBNYW5kcmFrZSA3LjIgZGlzdHJpYnV0aW9u
Lg0KSSd2ZSBnb3QgYSBwcm9ibGVtIHdpdGggYSBkeW5hbWljX2Nhc3Qgb3BlcmF0b3IgY2FsbC4N
Cg0KSW4gdGhlIGNhc2UgdGhhdCB0aGUgcmVzdWx0IGlzIG5vdCBOVUxMLCBJIGhhdmUgYSByZXN1
bHQgcG9pbnRlciANCnNoaWZ0ZWQgYnkgYSA0IGJ5dGVzIG9mZnNldC4NCkl0IG9jY3VycyB3aGVu
IG9uZSBvZiB0aGUgYW5jZXN0b3JzIGNsYXNzZXMgaGFzIG5vIHZpcnR1YWwgZnVuY3Rpb24uDQoN
CkkndmUgbWFkZSBhIHNtYWxsIHRlc3QgcHJvZ3JhbSB0byBpbGx1c3RyYXRlIG15IHByb2JsZW0u
DQpEZXBlbmRpbmcgb24gdGhlIGZhY3QgdGhhdCB0aGUgbGluZSBkZWZpbmluZyB0aGUgTm9WRGVz
dCBkZXN0cnVjdG9yDQppcyBjb21tZW50ZWQgb3V0IG9yIG5vdCwgZGlzcGxheWVkIHBvaW50ZXIg
dmFsdWUgaXMgY29ycmVjdCBvciBub3QuDQoNCnRtcD5jYXQgL2V0Yy9tYW5kcmFrZS1yZWxlYXNl
DQpMaW51eCBNYW5kcmFrZSByZWxlYXNlIDcuMiAoT2R5c3NleSkgZm9yIGk1ODYgDQp0bXA+Z2Nj
IC12DQpSZWFkaW5nIHNwZWNzIGZyb20gL3Vzci9saWIvZ2NjLWxpYi9pNTg2LW1hbmRyYWtlLWxp
bnV4LzIuOTUuMy9zcGVjcw0KZ2NjIHZlcnNpb24gMi45NS4zIDE5OTkxMDMwIChwcmVyZWxlYXNl
KQ0KDQoqLw0KDQojaW5jbHVkZSA8aW9zdHJlYW0uaD4NCg0KY2xhc3MgTm9WRGVzdA0Kew0KcHVi
bGljOg0KDQoJTm9WRGVzdCggKSB7IH0NCi8vCQkJdmlydHVhbCB+Tm9WRGVzdCggKSB7IH0NCn07
DQoNCmNsYXNzIFdpdGhWRGVzdA0Kew0KcHVibGljOg0KDQoJV2l0aFZEZXN0KCApIHsgfQ0KCXZp
cnR1YWwgfldpdGhWRGVzdCggKSB7IH0NCn07DQoNCmNsYXNzIEJhc2UgOiBwdWJsaWMgTm9WRGVz
dCwgcHVibGljIFdpdGhWRGVzdA0Kew0KcHVibGljOg0KDQoJQmFzZSggKSB7IH0NCn07DQoNCmNs
YXNzIERlcml2ZWQgOiBwdWJsaWMgQmFzZQ0Kew0KcHVibGljOg0KDQoJRGVyaXZlZCggKSB7IH0N
Cgl2aXJ0dWFsIH5EZXJpdmVkKCApIHsgfQ0KfTsNCg0KaW50DQptYWluKCApDQp7DQoJRGVyaXZl
ZCBkMTsNCglCYXNlKiBlcXB0ID0gJmQxOw0KCURlcml2ZWQqIGQyID0gZHluYW1pY19jYXN0PERl
cml2ZWQqPiggZXFwdCApOw0KCQ0KCWNvdXQgPDwgImQxIDogIiA8PCAodm9pZCopICZkMSA8PCBl
bmRsOw0KCWNvdXQgPDwgImQyIDogIiA8PCAodm9pZCopIGQyIDw8IGVuZGw7DQoNCglyZXR1cm4g
MDsNCn0NCg==



More information about the Gcc-bugs mailing list