From mboxrd@z Thu Jan 1 00:00:00 1970 From: pere@hungry.com To: gcc-gnats@gcc.gnu.org Subject: c++/3194: to many calls to copy ctor Date: Fri, 15 Jun 2001 05:56:00 -0000 Message-id: <20010615125008.17882.qmail@sourceware.cygnus.com> X-SW-Source: 2001-06/msg00666.html List-Id: >Number: 3194 >Category: c++ >Synopsis: to many calls to copy ctor >Confidential: no >Severity: serious >Priority: medium >Responsible: unassigned >State: open >Class: pessimizes-code >Submitter-Id: net >Arrival-Date: Fri Jun 15 05:56:01 PDT 2001 >Closed-Date: >Last-Modified: >Originator: Petter Reinholdtsen >Release: gcc 2.95.2 and 3.0 2001-06-15 >Organization: >Environment: Debian 2.2 >Description: Given the following test program, gcc 2.95.2 behaves very different with and without an explicit copy constructor. Without With ------------------------------------------------ ctor default 0xbffff628 ctor default 0xbffff628 foo ctor 1 dtor 0 foo ctor 1 dtor 0 dtor default 0xbffff604 dtor default 0xbffff628 dtor default 0xbffff628 ctor temp 0xbffff628 ctor temp 0xbffff624 foo ctor 2 dtor 1 foo ctor 2 dtor 2 dtor temp 0xbffff628 dtor temp 0xbffff604 ctor live 0xbffff628 dtor temp 0xbffff624 cctor live 0xbffff624 ctor live 0xbffff620 foo ctor 4 dtor 2 foo ctor 3 dtor 4 dtor live 0xbffff624 dtor live 0xbffff604 dtor live 0xbffff628 dtor live 0xbffff61c dtor live 0xbffff620 Notice how the default copy constructor is called even if it isn't needed. >How-To-Repeat: Compile and run the enclosed test program. >Fix: >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: text/x-c++src; name="defaultparm.cpp" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="defaultparm.cpp" LyoKCkdpdmVuIHRoZSBmb2xsb3dpbmcgdGVzdCBwcm9ncmFtLCBnY2MgMi45NS4yIGJlaGF2ZXMg dmVyeSBkaWZmZXJlbnQKd2l0aCBhbmQgd2l0aG91dCBhIGNvcHkgY29uc3RydWN0b3IuCgogIFdp dGhvdXQgICAgICAgICAgICAgICAgICBXaXRoCiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgY3RvciBkZWZhdWx0IDB4YmZmZmY2MjggIGN0b3IgZGVm YXVsdCAweGJmZmZmNjI4CiAgZm9vIGN0b3IgMSBkdG9yIDAgICAgICAgIGZvbyBjdG9yIDEgZHRv ciAwCiAgZHRvciBkZWZhdWx0IDB4YmZmZmY2MDQgIGR0b3IgZGVmYXVsdCAweGJmZmZmNjI4CiAg ZHRvciBkZWZhdWx0IDB4YmZmZmY2MjggIGN0b3IgdGVtcCAweGJmZmZmNjI4CiAgY3RvciB0ZW1w IDB4YmZmZmY2MjQgICAgIGZvbyBjdG9yIDIgZHRvciAxCiAgZm9vIGN0b3IgMiBkdG9yIDIgICAg ICAgIGR0b3IgdGVtcCAweGJmZmZmNjI4CiAgZHRvciB0ZW1wIDB4YmZmZmY2MDQgICAgIGN0b3Ig bGl2ZSAweGJmZmZmNjI4CiAgZHRvciB0ZW1wIDB4YmZmZmY2MjQgICAgIGNjdG9yIGxpdmUgMHhi ZmZmZjYyNAogIGN0b3IgbGl2ZSAweGJmZmZmNjIwICAgICBmb28gY3RvciA0IGR0b3IgMgogIGZv byBjdG9yIDMgZHRvciA0ICAgICAgICBkdG9yIGxpdmUgMHhiZmZmZjYyNAogIGR0b3IgbGl2ZSAw eGJmZmZmNjA0ICAgICBkdG9yIGxpdmUgMHhiZmZmZjYyOAogIGR0b3IgbGl2ZSAweGJmZmZmNjFj CiAgZHRvciBsaXZlIDB4YmZmZmY2MjAKCk5vdGljZSBob3cgdGhlIGRlZmF1bHQgY29weSBjb25z dHJ1Y3RvciBpcyBjYWxsZWQgZXZlbiBpZiBpdCBpc24ndApuZWVkZWQuCgoqLwoKI2luY2x1ZGUg PHN0ZGlvLmg+CmNsYXNzIFRlc3QKewpwdWJsaWM6CiAgVGVzdChjb25zdCBjaGFyICpuYW1lKSA6 IG1fbmFtZShuYW1lKSB7IGN0b3IrKzsgcHJpbnQoImN0b3IiKTsgfTsKICAvLyBGbGlwIHRoaXMg c3dpdGNoIHRvIGNoYW5nZSB0aGUgYmVoYXZvaXVyCiNpZiBub3RfdXNpbmdfZGVmYXVsdF9jb3B5 X2N0b3IKICBUZXN0KGNvbnN0IFRlc3QmIHQpIDogbV9uYW1lKHQubV9uYW1lKSB7IGN0b3IrKzsg cHJpbnQoImNjdG9yIik7IH07CiNlbmRpZgogIH5UZXN0KCkgeyBkdG9yKys7IHByaW50KCJkdG9y Iik7IH07CgogIHN0YXRpYyBpbnQgY3RvciwgZHRvcjsKcHJpdmF0ZToKICBjb25zdCBjaGFyICpt X25hbWU7CiAgdm9pZCBwcmludChjb25zdCBjaGFyICpmdW5jKSB7IHByaW50ZigiJXMgJXMgJXBc biIsIGZ1bmMsIG1fbmFtZSwgdGhpcyk7fTsKfTsKCmludCBUZXN0OjpjdG9yID0gMDsKaW50IFRl c3Q6OmR0b3IgPSAwOwoKdm9pZApmb28oVGVzdCB0ID0gVGVzdCgiZGVmYXVsdCIpKQp7CiAgcHJp bnRmKCJmb28gY3RvciAlZCBkdG9yICVkXG4iLCBUZXN0OjpjdG9yLCBUZXN0OjpkdG9yKTsKfQoK aW50IG1haW4oKQp7CiAgZm9vKCk7CiAgZm9vKFRlc3QoInRlbXAiKSk7CgogIFRlc3QgdCgibGl2 ZSIpOwogIGZvbyh0KTsKICByZXR1cm4gMDsKfQo=