From mboxrd@z Thu Jan 1 00:00:00 1970 From: ianw@sgi.com To: gcc-gnats@gcc.gnu.org Cc: keith@sgi.com Subject: c++/2892: array addresses corrupted when using template classes Date: Mon, 21 May 2001 15:56:00 -0000 Message-id: <20010521225234.14691.qmail@sourceware.cygnus.com> X-SW-Source: 2001-05/msg00605.html List-Id: >Number: 2892 >Category: c++ >Synopsis: array addresses corrupted when using template classes >Confidential: no >Severity: serious >Priority: medium >Responsible: unassigned >State: open >Class: sw-bug >Submitter-Id: net >Arrival-Date: Mon May 21 15:56:02 PDT 2001 >Closed-Date: >Last-Modified: >Originator: Ian Williams >Release: gcc version 2.96 20000731 (Red Hat Linux 7.1 2.96-81) >Organization: >Environment: RedHat7.1 i386 >Description: Array addresses passed into a template class seem to get corrupted through the call. The attached program shows the issue. >How-To-Repeat: Compile the attached program and run it. It will print out the contents of several arrays through the call to the template class. The ouput should look something like: ./test Input = 1, -1, 1 item = 2.17777, -1.99912, -1.99909 mBuffer[0] = 2.17777, -1.99912, -1.99909, Output = 2.17777, -1.99912, -1.99909 Input = 1, 1, -1 item = 2.17777, -1.99912, -1.99909 mBuffer[1] = 2.17777, -1.99912, -1.99909, Output = 2.17777, -1.99912, -1.99909 Input = 1, 1, 1 item = 2.17777, -1.99912, -1.99909 mBuffer[2] = 2.17777, -1.99912, -1.99909, Output = 2.17777, -1.99912, -1.99909 Input = 1, -1, 1 item = 2.17777, -1.99912, -1.99909 mBuffer[3] = 2.17777, -1.99912, -1.99909, Output = 2.17777, -1.99912, -1.99909 The contents of the 'input' array should be the same as 'item', 'mbuffer' and 'output', however, they aren't and it appears as though the address gets mangled through the call. The same problem occures if the class is instanced to any type of 'int', 'float' or 'double' arrays. >Fix: >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/octet-stream; name="program.c++" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="program.c++" e1xydGYxXGFuc2lcYW5zaWNwZzEyNTJcZGVmZjBcZGVmbGFuZzEwMzN7XGZvbnR0Ymx7XGYwXGZz d2lzc1xmY2hhcnNldDAgQXJpYWw7fXtcZjFcZm1vZGVyblxmY2hhcnNldDAgQ291cmllciBOZXc7 fX0NCntcY29sb3J0YmwgO1xyZWQwXGdyZWVuMFxibHVlMDt9DQpcdmlld2tpbmQ0XHVjMVxwYXJk XGZpLTE4MDBcbGkxODAwXHR4MTgwMFxjZjFcYlxmMFxmczIwIEZyb206XGIwXHRhYiBJYW4gV2ls bGlhbXNccGFyDQpcYiBTZW50OlxiMFx0YWIgV2VkbmVzZGF5LCBNYXkgMTYsIDIwMDEgNzo1OSBQ TVxwYXINClxiIFRvOlxiMFx0YWIgJ2J1Zy1nKytAcHJlcC5haS5taXQuZWR1J1xwYXINClxiIENj OlxiMFx0YWIgSWFuIFdpbGxpYW1zXHBhcg0KXGIgU3ViamVjdDpcYjBcdGFiIHBvaW50ZXIgY29y cnVwdGlvbiBidWcgdy8gdGVtcGxhdGUgY2xhc3Nlc1xwYXINClxwYXJkXGNmMFxmMSAvKlx0YWIg Q29tcGlsZTogICAgICAgIGcrKyAtbyB0ZXN0IHRlc3QuYysrXHRhYiAqL1xwYXINClxwYXINCiNp bmNsdWRlIDxzdHJpbmcuaD5ccGFyDQojaW5jbHVkZSA8aW9zdHJlYW0uaD5ccGFyDQojaW5jbHVk ZSA8ZnN0cmVhbS5oPlxwYXINCiNpbmNsdWRlIDxzdGRsaWIuaD5ccGFyDQpccGFyDQojaWZuZGVm IFRSVUVccGFyDQojZGVmaW5lIFRSVUUgICAgMVxwYXINCiNlbmRpZlxwYXINClxwYXINCiNpZm5k ZWYgRkFMU0VccGFyDQojZGVmaW5lIEZBTFNFICAgMFxwYXINCiNlbmRpZlxwYXINClxwYXINCnRl bXBsYXRlIDxjbGFzcyBULCBjbGFzcyBGPiAvLyBUPSJUbyIgdGhlIHN0b3JhZ2UgZm9ybWF0IGZv ciB0aGUgYnVmZmVyXHBhcg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGPSJG cm9tIiwgdGhlIHN0b3JhZ2UgZm9ybWF0IGZyb20gd2hpY2ggdGhlXHBhcg0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgZGF0YSBjb21lc1xwYXINClxwYXINClxw YXINCmNsYXNzIEJ1ZmZlclxwYXINClx7XHBhcg0KcHVibGljOlxwYXINClxwYXINCiAgICAgICAg QnVmZmVyKGludCBsZW5ndGg9MTAwLCBjaGFyKiBsYWJlbD1OVUxMKTtccGFyDQogICAgICAgIHZp cnR1YWwgfkJ1ZmZlcigpO1xwYXINClxwYXINCiAgICAgICAgdmlydHVhbCBib29sICAgIGFkZChG IGl0ZW0pID0gMDtccGFyDQogICAgICAgIFQqICAgICAgICAgICAgICAgICAgICAgIGJ1ZigpIGNv bnN0O1xwYXINCiAgICAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgYnVmTGVuZ3RoKCkgY29u c3Q7XHBhcg0KICAgICAgICBib29sICAgICAgICAgICAgICAgICAgICBjYW5BZGRUbygpO1xwYXIN CiAgICAgICAgdm9pZCAgICAgICAgICAgICAgICAgICAgcmVzZXQoKTtccGFyDQpccGFyDQpwcm90 ZWN0ZWQ6XHBhcg0KXHBhcg0KICAgICAgICBUKiAgICAgICAgICAgICAgbUJ1ZmZlcjtccGFyDQog ICAgICAgIGludCAgICAgICAgICAgICBtSW5CdWZmZXI7XHBhcg0KXHBhcg0KcHJpdmF0ZTpccGFy DQpccGFyDQogICAgICAgIEJ1ZmZlcihjb25zdCBCdWZmZXI8VCxGPiYgYik7XHBhcg0KXHBhcg0K ICAgICAgICBpbnQgICAgIG1CdWZmZXJMZW5ndGg7XHBhcg0KICAgICAgICBib29sICAgIG1PdmVy Zmxvd1JlcG9ydGVkO1xwYXINCiAgICAgICAgY2hhciogICBtQnVmZmVyTmFtZTtccGFyDQpcfTtc cGFyDQpccGFyDQp0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgRj5ccGFyDQpCdWZmZXI8VCxGPjo6 QnVmZmVyKGludCBsZW5ndGgsIGNoYXIqIGxhYmVsKSA6XHBhcg0KICAgICAgICAgICAgICAgIG1C dWZmZXJMZW5ndGgobGVuZ3RoKSwgbU92ZXJmbG93UmVwb3J0ZWQoRkFMU0UpLFxwYXINCiAgICAg ICAgICAgICAgICBtQnVmZmVyKE5VTEwpLCBtSW5CdWZmZXIoMCksIG1CdWZmZXJOYW1lKE5VTEwp XHBhcg0KXHtccGFyDQogICAgICAgIG1CdWZmZXIgPSBuZXcgVFtsZW5ndGhdO1xwYXINCiAgICAg ICAgaWYgKGxhYmVsICE9IE5VTEwpXHBhcg0KICAgICAgICBce1xwYXINCiAgICAgICAgICAgICAg ICBtQnVmZmVyTmFtZSA9IG5ldyBjaGFyW3N0cmxlbihsYWJlbCkrMV07XHBhcg0KICAgICAgICAg ICAgICAgIHN0cmNweShtQnVmZmVyTmFtZSxsYWJlbCk7XHBhcg0KICAgICAgICBcfVxwYXINClx9 XHBhcg0KXHBhcg0KdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIEY+XHBhcg0KQnVmZmVyPFQsRj46 OkJ1ZmZlcihjb25zdCBCdWZmZXI8VCxGPiYgYikgOlxwYXINCiAgICAgICAgICAgICAgICBtQnVm ZmVyTGVuZ3RoKDApLCBtT3ZlcmZsb3dSZXBvcnRlZChGQUxTRSksXHBhcg0KICAgICAgICAgICAg ICAgIG1CdWZmZXIoTlVMTCksIG1JbkJ1ZmZlcigwKSwgbUJ1ZmZlck5hbWUoTlVMTClccGFyDQpc e1xwYXINClx9XHBhcg0KXHBhcg0KdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIEY+XHBhcg0KQnVm ZmVyPFQsRj46On5CdWZmZXIoKVxwYXINClx7XHBhcg0KICAgICAgICBpZiAobUJ1ZmZlciAhPSBO VUxMKVxwYXINCiAgICAgICAgXHtccGFyDQogICAgICAgICAgICAgICAgZGVsZXRlIFtdIG1CdWZm ZXI7XHBhcg0KICAgICAgICAgICAgICAgIG1CdWZmZXIgPSBOVUxMO1xwYXINCiAgICAgICAgICAg ICAgICBtQnVmZmVyTGVuZ3RoID0gMDtccGFyDQogICAgICAgICAgICAgICAgcmVzZXQoKTtccGFy DQogICAgICAgIFx9XHBhcg0KICAgICAgICBpZiAobUJ1ZmZlck5hbWUgIT0gTlVMTClccGFyDQog ICAgICAgIFx7XHBhcg0KICAgICAgICAgICAgICAgIGRlbGV0ZSBbXSBtQnVmZmVyTmFtZTtccGFy DQogICAgICAgICAgICAgICAgbUJ1ZmZlck5hbWUgPSBOVUxMO1xwYXINCiAgICAgICAgXH1ccGFy DQpcfVxwYXINClxwYXINCnRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBGPlxwYXINClQqXHBhcg0K QnVmZmVyPFQsRj46OmJ1ZigpIGNvbnN0XHBhcg0KXHtccGFyDQogICAgICAgIHJldHVybiBtQnVm ZmVyO1xwYXINClx9XHBhcg0KXHBhcg0KdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIEY+XHBhcg0K aW50XHBhcg0KQnVmZmVyPFQsRj46OmJ1Zkxlbmd0aCgpIGNvbnN0XHBhcg0KXHtccGFyDQogICAg ICAgIHJldHVybiBtSW5CdWZmZXI7XHBhcg0KXH1ccGFyDQpccGFyDQp0ZW1wbGF0ZSA8Y2xhc3Mg VCwgY2xhc3MgRj5ccGFyDQpib29sXHBhcg0KQnVmZmVyPFQsRj46OmNhbkFkZFRvKClccGFyDQpc e1xwYXINCiAgICAgICAgaWYgKCBtSW5CdWZmZXIgPT0gbUJ1ZmZlckxlbmd0aCApXHBhcg0KICAg ICAgICBce1xwYXINCiAgICAgICAgICAgICAgICBpZiAoIW1PdmVyZmxvd1JlcG9ydGVkKVxwYXIN CiAgICAgICAgICAgICAgICBce1xwYXINCiAgICAgICAgICAgICAgICAgICAgICAgIG1PdmVyZmxv d1JlcG9ydGVkID0gVFJVRTtccGFyDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAobUJ1ZmZl ck5hbWUgIT0gTlVMTClccGFyDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnIg PDwgbUJ1ZmZlck5hbWUgPDwgIjogIjtccGFyDQogICAgICAgICAgICAgICAgICAgICAgICBjZXJy IDw8ICJCdWZmZXIgb3ZlcmZsb3dcXG4iO1xwYXINCiAgICAgICAgICAgICAgICBcfVxwYXINCiAg ICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7XHBhcg0KICAgICAgICBcfVxwYXINCiAgICAgICAg cmV0dXJuIFRSVUU7XHBhcg0KXH1ccGFyDQpccGFyDQp0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3Mg Rj5ccGFyDQp2b2lkXHBhcg0KQnVmZmVyPFQsRj46OiByZXNldCgpXHBhcg0KXHtccGFyDQogICAg ICAgIG1PdmVyZmxvd1JlcG9ydGVkID0gRkFMU0U7XHBhcg0KICAgICAgICBtSW5CdWZmZXIgPSAw O1xwYXINClx9XHBhcg0KXHBhcg0KLy8vLy8vLy8vLy8vLy8vLyBTdWJjbGFzcyBmb3IgYnVmZmVy aW5nIGFycmF5cyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xwYXINClxwYXINCnRlbXBs YXRlIDxjbGFzcyBULCBjbGFzcyBGPlxwYXINCmNsYXNzIEJ1ZmZlclYgOiBwdWJsaWMgQnVmZmVy PFQsRj5ccGFyDQpce1xwYXINCnB1YmxpYzpccGFyDQogICAgICAgIEJ1ZmZlclYoaW50IGxlbmd0 aD0xMDAsIGNoYXIqIGxhYmVsPU5VTEwpO1xwYXINCiAgICAgICAgdmlydHVhbCB+QnVmZmVyVigp O1xwYXINClxwYXINCiAgICAgICAgdmlydHVhbCBib29sICAgIGFkZChGIGl0ZW0pO1xwYXINClxw YXINCnByaXZhdGU6XHBhcg0KICAgICAgICBCdWZmZXJWKGNvbnN0IEJ1ZmZlclY8VCxGPiYgYik7 XHBhcg0KXH07XHBhcg0KXHBhcg0KdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIEY+XHBhcg0KQnVm ZmVyVjxULEY+OjpCdWZmZXJWKGludCBsZW5ndGgsIGNoYXIqIGxhYmVsKSA6IEJ1ZmZlcjxULEY+ KGxlbmd0aCxsYWJlbClccGFyDQpce1xwYXINClx9XHBhcg0KXHBhcg0KdGVtcGxhdGUgPGNsYXNz IFQsIGNsYXNzIEY+XHBhcg0KQnVmZmVyVjxULEY+OjpCdWZmZXJWKGNvbnN0IEJ1ZmZlclY8VCxG PiYgYikgOiBCdWZmZXI8VCxGPihiKVxwYXINClx7XHBhcg0KXH1ccGFyDQpccGFyDQp0ZW1wbGF0 ZSA8Y2xhc3MgVCwgY2xhc3MgRj5ccGFyDQpCdWZmZXJWPFQsRj46On5CdWZmZXJWKClccGFyDQpc e1xwYXINClx9XHBhcg0KXHBhcg0KdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIEY+XHBhcg0KYm9v bFxwYXINCkJ1ZmZlclY8VCxGPjo6YWRkKEYgaXRlbSlccGFyDQpce1xwYXINClxwYXINCiAgICAg ICAgY291dCAgICA8PCAiaXRlbSA9ICIgPDwgaXRlbVswXSA8PCAiLCAiIFxwYXINCiAgICAgICAg ICAgICAgICA8PCBpdGVtWzFdIDw8ICIsICIgPDwgaXRlbVsyXSA8PCAgZW5kbDtccGFyDQovKlxw YXINCiAgICAgICAgRm9yIHNvbWUgcmVhc29uIHRoZSBmb2xsb3dpbmcgbGluZSB5aWVsZHMgdGhl IGNvcnJlY3Qgb3V0cHV0XHBhcg0KICAgICAgICB3aGVuIGluc3RhbnRpYXRlZCB3aXRoIEYgPSBp bnRbM10gb3IgRiA9IGZsb2F0WzNdICAgICAgICAgICAgICAgXHBhcg0KICAgICAgICBjb3V0ICAg IDw8ICJpdGVtID0gIiA8PCBpdGVtWzArM10gPDwgIiwgIiBccGFyDQogICAgICAgICAgICAgICAg PDwgaXRlbVsxKzNdIDw8ICIsICIgPDwgaXRlbVsyKzNdIDw8ICBlbmRsO1xwYXINCiovXHBhcg0K XHBhcg0KICAgICAgICBpZiAoQnVmZmVyPFQsRj46OmNhbkFkZFRvKCkpXHBhcg0KICAgICAgICBc e1xwYXINCiAgICAgICAgICAgICAgICBjb3V0IDw8ICJtQnVmZmVyWyIgPDwgbUluQnVmZmVyIDw8 ICJdID0gIjtccGFyDQogICAgICAgICAgICAgICAgZm9yIChpbnQgaT0wIDsgaTwzIDsgaSsrKSBc e1xwYXINCi8qIFxwYXINCiAgICAgICAgU2VlIGFib3ZlIHdoZW4gaW5zdGFuY2lhdGVkIHdpdGgg RiA9IGludFszXSBhbmQgZmxvYXRbM10gICAgICAgIFxwYXINCiAgICAgICAgICAgICAgICAgICAg ICAgIG1CdWZmZXJbbUluQnVmZmVyXVtpXSA9IGl0ZW1baSszXTtccGFyDQoqL1xwYXINCiAgICAg ICAgICAgICAgICAgICAgICAgIG1CdWZmZXJbbUluQnVmZmVyXVtpXSA9IGl0ZW1baV07XHBhcg0K ICAgICAgICAgICAgICAgICAgICAgICAgY291dCA8PCBtQnVmZmVyW21JbkJ1ZmZlcl1baV0gPDwg IiwgIjtccGFyDQogICAgICAgICAgICAgICAgXH1ccGFyDQogICAgICAgICAgICAgICAgY291dCA8 PCBlbmRsO1xwYXINCiAgICAgICAgICAgICAgICBtSW5CdWZmZXIrKztccGFyDQogICAgICAgICAg ICAgICAgcmV0dXJuIFRSVUU7XHBhcg0KICAgICAgICBcfVxwYXINCiAgICAgICAgcmV0dXJuIEZB TFNFO1xwYXINClx9XHBhcg0KXHBhcg0KXHBhcg0KXHBhcg0KLy90eXBlZGVmIGludCAgRHh5elsz XSwgICpEeHl6UDtccGFyDQovL3R5cGVkZWYgZmxvYXQgIER4eXpbM10sICAqRHh5elA7XHBhcg0K dHlwZWRlZiBkb3VibGUgIER4eXpbM10sICAqRHh5elA7XHBhcg0KXHBhcg0Kc3RhdGljIEJ1ZmZl clY8RHh5eixEeHl6PiAgICAgICBmYWNlVmVydGV4QnVmKDEwLCJmYWNlVmVydGV4QnVmIik7XHBh cg0KXHBhcg0KRHh5eiAgICBpbnB1dF9wb2ludHNbNF09XHsgICAgICAgXHsxLjAsIC0xLjAsIDEu MFx9LFx7MS4wLCAxLjAsIC0xLjBcfSxccGFyDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFx7MS4wLCAxLjAsIDEuMFx9LFx7MS4wLCAtMS4wLCAxLjBcfSBcfTtccGFyDQpccGFyDQpp bnQgbWFpbiAoaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSlccGFyDQpce1xwYXINCiAgICAgICAgaW50 IGkgPSAwLCBpbmRleDtccGFyDQogICAgICAgIGZhY2VWZXJ0ZXhCdWYucmVzZXQoKTtccGFyDQpc cGFyDQogICAgICAgIGZvciAoaT0wO2k8NDsgaSsrKSBce1xwYXINClxwYXINCiAgICAgICAgICAg ICAgICBpbmRleCA9IGZhY2VWZXJ0ZXhCdWYuYnVmTGVuZ3RoKCk7XHBhcg0KICAgICAgICAgICAg ICAgIER4eXogICAgdGVtcCA9IFx7aW5wdXRfcG9pbnRzW2ldWzBdLCBccGFyDQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGlucHV0X3BvaW50c1tpXVsxXSwgXHBhcg0KICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9wb2ludHNbaV1bMl1cfTtccGFyDQpccGFyDQog ICAgICAgICAgICAgICAgY291dCA8PCAiSW5wdXQgPSAiIDw8IHRlbXBbMF0gPDwgIiwgIiBccGFy DQogICAgICAgICAgICAgICAgICAgICA8PCB0ZW1wWzFdIDw8ICIsICIgPDwgIHRlbXBbMl0gPDwg ZW5kbDsgO1xwYXINClxwYXINCiAgICAgICAgICAgICAgICBmYWNlVmVydGV4QnVmLmFkZCh0ZW1w KTtccGFyDQogICAgICAgICAgICAgICAgRHh5elAgdGVtcFAgPSBmYWNlVmVydGV4QnVmLmJ1Zigp W2luZGV4XTtccGFyDQpccGFyDQogICAgICAgICAgICAgICAgY291dCA8PCAiT3V0cHV0ID0gIiA8 PCB0ZW1wUFswXSA8PCAiLCAiIFxwYXINCiAgICAgICAgICAgICAgICAgICAgIDw8IHRlbXBQWzFd IDw8ICIsICIgPDwgIHRlbXBQWzJdIDw8IGVuZGw7IDtccGFyDQpccGFyDQogICAgICAgIFx9XHBh cg0KXHBhcg0KICAgICAgICByZXR1cm4gMDtccGFyDQpcfVxwYXINClxmMFxwYXINClxwYXJkXGZp LTE4MDBcbGkxODAwXHR4MTgwMFxjZjFccGFyDQp9DQoA