public inbox for gcc-prs@sourceware.org
help / color / mirror / Atom feed
* optimization/7247: copy constructor missing when inlining enabled for i386
@ 2002-07-09 10:26 gawrilow
  0 siblings, 0 replies; 4+ messages in thread
From: gawrilow @ 2002-07-09 10:26 UTC (permalink / raw)
  To: gcc-gnats


>Number:         7247
>Category:       optimization
>Synopsis:       copy constructor missing when inlining enabled for i386
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          wrong-code
>Submitter-Id:   net
>Arrival-Date:   Tue Jul 09 10:26:00 PDT 2002
>Closed-Date:
>Last-Modified:
>Originator:     Ewgenij Gawrilow, TU Berlin, Dept. of Math
>Release:        3.1
>Organization:
>Environment:
Reading specs from /usr/site-local/experimental/lib/gcc-lib/i686-pc-linux-gnu/3.1/specs
Configured with: ../gcc-3.1/configure --prefix=/usr/site-local/experimental --with-local-prefix=/usr/site-local --with-gxx-include-dir=/usr/site-local/share/include/g++ --enable-shared --enable-libgcj --enable-languages=c++,java --with-cpu=athlon
Thread model: single
gcc version 3.1
>Description:
A copy constructor for a class is not called at the bottom of a complex expression involving many small inlined functions.

The class in question is "double_zero", defined at line 121. It does not matter whether the constructor is defined explicitly or by compiler itself.

The place its copy contructor ought to be called is the constructor of "modified_container_base" (line 91), instantiated from "TransformedContainer" (line 156), instantiated in its turn from "IncidenceMatrix" (line 293).

Sorry for a lengthy example; if I would simplify the code a bit further, the bug would disappear. The original program  had over 60K lines.

The bug disappears when inlining is disabled, but also when the function "attach_operation" (line 165) is made more fat by inserting "dump_op(op);" at its beginning. Surprisingly, the whole expression remains inlined, but the resulting code is suddenly correct!

On a UltraSPARC platform (Solaris 8), this bug does not occur at all, in any setting.

gcc 3.0.4 seems to be free of this bug on both platforms.
>How-To-Repeat:
compile the attached program with -O3 and run it.
If the generated code is correct, both lines printed will contain the same number, 1e-5.
>Fix:

>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/octet-stream; name="bad_inline.cc"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="bad_inline.cc"

I2lmICNjcHUoaTM4NikKZXh0ZXJuICJDIiB7CnR5cGVkZWYgc3RydWN0IF9JT19GSUxFIEZJTEU7
CmV4dGVybiBGSUxFICpzdGRlcnI7CmV4dGVybiBpbnQgZnByaW50ZiAoRklMRSAqX19yZXN0cmlj
dCBfX3N0cmVhbSwKICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg
X19mb3JtYXQsIC4uLikgdGhyb3cgKCk7Cn0KI2VuZGlmCgpuYW1lc3BhY2UgcG0gewoKdGVtcGxh
dGUgPHR5cGVuYW1lIFRvcD4KY2xhc3MgR2VuZXJpYyB7CnByb3RlY3RlZDoKICAgR2VuZXJpYygp
IHsgfQogICBHZW5lcmljKGNvbnN0IEdlbmVyaWMmKSB7IH0KcHVibGljOgogICBjb25zdCBUb3Am
IHRvcCgpIGNvbnN0IHsKICAgICAgcmV0dXJuICpzdGF0aWNfY2FzdDxjb25zdCBUb3AqPih0aGlz
KTsKICAgfQogICBUb3AmIHRvcCgpIHsKICAgICAgcmV0dXJuICpzdGF0aWNfY2FzdDxUb3AqPih0
aGlzKTsKICAgfQp9OwoKdGVtcGxhdGUgPHR5cGVuYW1lIFRvcCwgdHlwZW5hbWUgQ29udGFpbmVy
PgpjbGFzcyBtb2RpZmllZF9jb250YWluZXJfZWxlbV9hY2Nlc3M7Cgp0ZW1wbGF0ZSA8dHlwZW5h
bWUgVG9wLCB0eXBlbmFtZSBDb250YWluZXI9dHlwZW5hbWUgVG9wOjpjb250YWluZXI+CmNsYXNz
IG1vZGlmaWVkX2NvbnRhaW5lcl9pbXBsCiAgIDogcHVibGljIEdlbmVyaWM8VG9wPiwKICAgICBw
dWJsaWMgbW9kaWZpZWRfY29udGFpbmVyX2VsZW1fYWNjZXNzPFRvcCxDb250YWluZXI+IHsKcHVi
bGljOgogICB0eXBlZGVmIENvbnRhaW5lciBjb250YWluZXI7Cn07Cgp0ZW1wbGF0ZSA8dHlwZW5h
bWUgVG9wLCB0eXBlbmFtZSBDb250YWluZXI+CmNsYXNzIG1vZGlmaWVkX2NvbnRhaW5lcl9lbGVt
X2FjY2VzcyB7CnByb3RlY3RlZDoKICAgbW9kaWZpZWRfY29udGFpbmVyX2ltcGw8VG9wLENvbnRh
aW5lcj4mIG1hc3RlcigpIHsKICAgICAgcmV0dXJuICpzdGF0aWNfY2FzdDxtb2RpZmllZF9jb250
YWluZXJfaW1wbDxUb3AsQ29udGFpbmVyPio+KHRoaXMpOwogICB9CiAgIGNvbnN0IG1vZGlmaWVk
X2NvbnRhaW5lcl9pbXBsPFRvcCxDb250YWluZXI+JiBtYXN0ZXIoKSBjb25zdCB7CiAgICAgIHJl
dHVybiAqc3RhdGljX2Nhc3Q8Y29uc3QgbW9kaWZpZWRfY29udGFpbmVyX2ltcGw8VG9wLENvbnRh
aW5lcj4qPih0aGlzKTsKICAgfQpwdWJsaWM6CiAgIGludCBzaXplKCkgY29uc3QgeyByZXR1cm4g
bWFzdGVyKCkudG9wKCkuZ2V0X2NvbnRhaW5lcigpLnNpemUoKTsgfQp9OwoKdGVtcGxhdGUgPHR5
cGVuYW1lIFRvcCwgdHlwZW5hbWUgQ29udGFpbmVyMT10eXBlbmFtZSBUb3A6OmNvbnRhaW5lcjEs
IHR5cGVuYW1lIENvbnRhaW5lcjI9dHlwZW5hbWUgVG9wOjpjb250YWluZXIyPgpjbGFzcyBjb250
YWluZXJfcGFpcl9pbXBsCiAgIDogcHVibGljIEdlbmVyaWM8VG9wPiB7CnB1YmxpYzoKICAgdHlw
ZWRlZiBDb250YWluZXIxIGNvbnRhaW5lcjE7CiAgIHR5cGVkZWYgQ29udGFpbmVyMiBjb250YWlu
ZXIyOwogICBpbnQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHRvcCgpLmdldF9jb250YWluZXIxKCku
c2l6ZSgpOyB9Cn07Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVG9wLCB0eXBlbmFtZSBDb250YWluZXIx
LCB0eXBlbmFtZSBDb250YWluZXIyPgpjbGFzcyBtb2RpZmllZF9jb250YWluZXJfcGFpcl9lbGVt
X2FjY2VzczsKCnRlbXBsYXRlIDx0eXBlbmFtZSBUb3AsIHR5cGVuYW1lIENvbnRhaW5lcjE9dHlw
ZW5hbWUgVG9wOjpjb250YWluZXIxLCB0eXBlbmFtZSBDb250YWluZXIyPXR5cGVuYW1lIFRvcDo6
Y29udGFpbmVyMj4KY2xhc3MgbW9kaWZpZWRfY29udGFpbmVyX3BhaXJfaW1wbAogICA6IHB1Ymxp
YyBHZW5lcmljPFRvcD4sCiAgICAgcHVibGljIG1vZGlmaWVkX2NvbnRhaW5lcl9wYWlyX2VsZW1f
YWNjZXNzPFRvcCxDb250YWluZXIxLENvbnRhaW5lcjI+IHsKcHVibGljOgogICB0eXBlZGVmIENv
bnRhaW5lcjEgY29udGFpbmVyMTsKICAgdHlwZWRlZiBDb250YWluZXIyIGNvbnRhaW5lcjI7Cn07
Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVG9wLCB0eXBlbmFtZSBDb250YWluZXIxLCB0eXBlbmFtZSBD
b250YWluZXIyPgpjbGFzcyBtb2RpZmllZF9jb250YWluZXJfcGFpcl9lbGVtX2FjY2VzcyB7CnBy
b3RlY3RlZDoKICAgbW9kaWZpZWRfY29udGFpbmVyX3BhaXJfaW1wbDxUb3AsIENvbnRhaW5lcjEs
IENvbnRhaW5lcjI+JiBtYXN0ZXIoKSB7CiAgICAgIHJldHVybiAqc3RhdGljX2Nhc3Q8bW9kaWZp
ZWRfY29udGFpbmVyX3BhaXJfaW1wbDxUb3AsIENvbnRhaW5lcjEsIENvbnRhaW5lcjI+Kj4odGhp
cyk7CiAgIH0KICAgY29uc3QgbW9kaWZpZWRfY29udGFpbmVyX3BhaXJfaW1wbDxUb3AsIENvbnRh
aW5lcjEsIENvbnRhaW5lcjI+JiBtYXN0ZXIoKSBjb25zdCB7CiAgICAgIHJldHVybiAqc3RhdGlj
X2Nhc3Q8Y29uc3QgbW9kaWZpZWRfY29udGFpbmVyX3BhaXJfaW1wbDxUb3AsIENvbnRhaW5lcjEs
IENvbnRhaW5lcjI+Kj4odGhpcyk7CiAgIH0KcHVibGljOgogICBpbnQgc2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIG1hc3RlcigpLnRvcCgpLmdldF9jb250YWluZXIxKCkuc2l6ZSgpOyB9Cn07Cgp0ZW1w
bGF0ZSA8dHlwZW5hbWUgQ29udGFpbmVyLCB0eXBlbmFtZSBPcGVyYXRpb24+CmNsYXNzIG1vZGlm
aWVkX2NvbnRhaW5lcl9iYXNlIHsKcHJvdGVjdGVkOgogICBjb25zdCBDb250YWluZXIqIHNyYzsK
ICAgT3BlcmF0aW9uIG9wOwpwdWJsaWM6CgogICBtb2RpZmllZF9jb250YWluZXJfYmFzZShjb25z
dCBDb250YWluZXImIHNyY19hcmcsIGNvbnN0IE9wZXJhdGlvbiYgb3BfYXJnKQogICAgICA6IHNy
Yygmc3JjX2FyZyksIG9wKG9wX2FyZykgeyB9CgogICBjb25zdCBDb250YWluZXImIGdldF9jb250
YWluZXIoKSBjb25zdCB7IHJldHVybiAqc3JjOyB9Cn07Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29u
dGFpbmVyMSwgdHlwZW5hbWUgQ29udGFpbmVyMj4KY2xhc3MgY29udGFpbmVyX3BhaXJfYmFzZSB7
CnByb3RlY3RlZDoKICAgY29uc3QgQ29udGFpbmVyMSAqc3JjMTsKICAgY29uc3QgQ29udGFpbmVy
MiAqc3JjMjsKcHVibGljOgogICBjb250YWluZXJfcGFpcl9iYXNlKGNvbnN0IENvbnRhaW5lcjEm
IHNyYzFfYXJnLCBjb25zdCBDb250YWluZXIyJiBzcmMyX2FyZykKICAgICAgOiBzcmMxKCZzcmMx
X2FyZyksIHNyYzIoJnNyYzJfYXJnKSB7IH0KCiAgIGNvbnN0IENvbnRhaW5lcjEmIGdldF9jb250
YWluZXIxKCkgY29uc3QgeyByZXR1cm4gKnNyYzE7IH0KICAgY29uc3QgQ29udGFpbmVyMiYgZ2V0
X2NvbnRhaW5lcjIoKSBjb25zdCB7IHJldHVybiAqc3JjMjsgfQp9OwoKdGVtcGxhdGUgPHR5cGVu
YW1lIENvbnRhaW5lcjEsIHR5cGVuYW1lIENvbnRhaW5lcjIsIHR5cGVuYW1lIE9wZXJhdGlvbj4K
Y2xhc3MgbW9kaWZpZWRfY29udGFpbmVyX3BhaXJfYmFzZQogICA6IHB1YmxpYyBjb250YWluZXJf
cGFpcl9iYXNlPENvbnRhaW5lcjEsIENvbnRhaW5lcjI+IHsKICAgdHlwZWRlZiBjb250YWluZXJf
cGFpcl9iYXNlPENvbnRhaW5lcjEsIENvbnRhaW5lcjI+IF9zdXBlcjsKcHJvdGVjdGVkOgogICBP
cGVyYXRpb24gb3A7CnB1YmxpYzoKICAgbW9kaWZpZWRfY29udGFpbmVyX3BhaXJfYmFzZShjb25z
dCBDb250YWluZXIxJiBzcmMxX2FyZywgY29uc3QgQ29udGFpbmVyMiYgc3JjMl9hcmcsIGNvbnN0
IE9wZXJhdGlvbiYgb3BfYXJnKQogICAgICA6IF9zdXBlcihzcmMxX2FyZyxzcmMyX2FyZyksIG9w
KG9wX2FyZykgeyB9Cn07CgpzdHJ1Y3QgZG91YmxlX3plcm8gewogICBjb25zdCBkb3VibGUgZXBz
aWxvbjsKCiAgIHR5cGVkZWYgZG91YmxlIGFyZ3VtZW50X3R5cGU7CiAgIHR5cGVkZWYgYm9vbCBy
ZXN1bHRfdHlwZTsKCiAgIGRvdWJsZV96ZXJvKGNvbnN0IGRvdWJsZSYgZXBzaWxvbl9hcmc9MWUt
OCkgOiBlcHNpbG9uKGVwc2lsb25fYXJnKSB7IH0KfTsKCnRlbXBsYXRlIDx0eXBlbmFtZSBFPgpj
bGFzcyBTZXJpZXMgIHsKcHJvdGVjdGVkOgogICBFIF9zdGFydDsKICAgaW50IF9zaXplOwogICBF
IF9zdGVwOwpwdWJsaWM6CiAgIFNlcmllcygpIDogX3N0YXJ0KDApLCBfc2l6ZSgwKSwgX3N0ZXAo
MCkgeyB9CgogICBTZXJpZXMoY29uc3QgRSYgc3RhcnRfYXJnLCBpbnQgc2l6ZV9hcmcsIGNvbnN0
IEUmIHN0ZXBfYXJnKQogICAgICA6IF9zdGFydChzdGFydF9hcmcpLCBfc2l6ZShzaXplX2FyZyks
IF9zdGVwKHN0ZXBfYXJnKSB7IH0KCiAgIGludCBzaXplKCkgY29uc3QgeyByZXR1cm4gX3NpemU7
IH0KfTsKCnZvaWQgZHVtcF9vcChjb25zdCBkb3VibGVfemVybyYgb3ApIHsKICAgZnByaW50Zihz
dGRlcnIsICIlbHg6JWVcbiIsICh1bnNpZ25lZCBsb25nKSZvcCwgb3AuZXBzaWxvbik7Cn0KCnRl
bXBsYXRlIDx0eXBlbmFtZSBDb250YWluZXIsIHR5cGVuYW1lIE9wZXJhdGlvbj4KY2xhc3MgVHJh
bnNmb3JtZWRDb250YWluZXIKICAgOiBwdWJsaWMgbW9kaWZpZWRfY29udGFpbmVyX2Jhc2U8Q29u
dGFpbmVyLCBPcGVyYXRpb24+LAogICAgIHB1YmxpYyBtb2RpZmllZF9jb250YWluZXJfaW1wbDwg
VHJhbnNmb3JtZWRDb250YWluZXI8Q29udGFpbmVyLE9wZXJhdGlvbj4sCgkJCQkgICAgIENvbnRh
aW5lciA+IHsKICAgdHlwZWRlZiBtb2RpZmllZF9jb250YWluZXJfYmFzZTxDb250YWluZXIsIE9w
ZXJhdGlvbj4gX2Jhc2U7CnB1YmxpYzoKICAgVHJhbnNmb3JtZWRDb250YWluZXIoY29uc3QgQ29u
dGFpbmVyJiBzcmNfYXJnLCBjb25zdCBPcGVyYXRpb24mIG9wX2FyZz1PcGVyYXRpb24oKSkKICAg
ICAgOiBfYmFzZShzcmNfYXJnLCBvcF9hcmcpIHsKICAgICAgZHVtcF9vcChvcF9hcmcpOwogICAg
ICBkdW1wX29wKG9wKTsKICAgfQp9OwoKdGVtcGxhdGUgPHR5cGVuYW1lIENvbnRhaW5lciwgdHlw
ZW5hbWUgT3BlcmF0aW9uPiBpbmxpbmUKVHJhbnNmb3JtZWRDb250YWluZXI8Q29udGFpbmVyLCBP
cGVyYXRpb24+CmF0dGFjaF9vcGVyYXRpb24oY29uc3QgQ29udGFpbmVyJiBzcmMsIGNvbnN0IE9w
ZXJhdGlvbiYgb3ApIHsKICAgcmV0dXJuIFRyYW5zZm9ybWVkQ29udGFpbmVyPENvbnRhaW5lciwg
T3BlcmF0aW9uPiAoc3JjLG9wKTsKfQoKdGVtcGxhdGUgPHR5cGVuYW1lIENvbnRhaW5lcjEsIHR5
cGVuYW1lIENvbnRhaW5lcjIsIHR5cGVuYW1lIE9wZXJhdGlvbj4KY2xhc3MgQ29udGFpbmVyUHJv
ZHVjdAogICA6IHB1YmxpYyBtb2RpZmllZF9jb250YWluZXJfcGFpcl9iYXNlPENvbnRhaW5lcjEs
Q29udGFpbmVyMixPcGVyYXRpb24+LAogICAgIHB1YmxpYyBtb2RpZmllZF9jb250YWluZXJfcGFp
cl9pbXBsPCBDb250YWluZXJQcm9kdWN0PENvbnRhaW5lcjEsQ29udGFpbmVyMixPcGVyYXRpb24+
LAoJCQkJCSAgQ29udGFpbmVyMSwgQ29udGFpbmVyMiA+IHsKICAgdHlwZWRlZiBtb2RpZmllZF9j
b250YWluZXJfcGFpcl9iYXNlPENvbnRhaW5lcjEsQ29udGFpbmVyMixPcGVyYXRpb24+IF9iYXNl
OwpwdWJsaWM6CiAgIENvbnRhaW5lclByb2R1Y3QoY29uc3QgQ29udGFpbmVyMSYgc3JjMV9hcmcs
IGNvbnN0IENvbnRhaW5lcjImIHNyYzJfYXJnLAogICAgICAgICAgICAgICAgICAgIGNvbnN0IE9w
ZXJhdGlvbiYgb3BfYXJnPU9wZXJhdGlvbigpKQogICAgICA6IF9iYXNlKHNyYzFfYXJnLCBzcmMy
X2FyZywgb3BfYXJnKSB7IH0KfTsKCnRlbXBsYXRlIDx0eXBlbmFtZSBDb250YWluZXIxLCB0eXBl
bmFtZSBDb250YWluZXIyLCB0eXBlbmFtZSBPcGVyYXRpb24+IGlubGluZQpDb250YWluZXJQcm9k
dWN0PENvbnRhaW5lcjEsIENvbnRhaW5lcjIsIE9wZXJhdGlvbj4KcHJvZHVjdChjb25zdCBDb250
YWluZXIxJiBjMSwgY29uc3QgQ29udGFpbmVyMiYgYzIsIE9wZXJhdGlvbiBvcCkgewogICByZXR1
cm4gQ29udGFpbmVyUHJvZHVjdDxDb250YWluZXIxLCBDb250YWluZXIyLCBPcGVyYXRpb24+IChj
MSxjMixvcCk7Cn0KCnRlbXBsYXRlIDx0eXBlbmFtZSBUb3AsIHR5cGVuYW1lIENvbnRhaW5lcjE9
dHlwZW5hbWUgVG9wOjpjb250YWluZXIxLCB0eXBlbmFtZSBDb250YWluZXIyPXR5cGVuYW1lIFRv
cDo6Y29udGFpbmVyMj4KY2xhc3MgaW5kZXhlZF9zdWJzZXRfaW1wbAogICA6IHB1YmxpYyBHZW5l
cmljPFRvcD4gewpwdWJsaWM6CiAgIHR5cGVkZWYgQ29udGFpbmVyMSBjb250YWluZXIxOwogICB0
eXBlZGVmIENvbnRhaW5lcjIgY29udGFpbmVyMjsKICAgaW50IHNpemUoKSBjb25zdCB7IHJldHVy
biB0b3AoKS5nZXRfY29udGFpbmVyMigpLnNpemUoKTsgfQp9OwoKdGVtcGxhdGUgPHR5cGVuYW1l
IF9NYXRyaXg+IGNsYXNzIFJvd3M7Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVG9wPgpjbGFzcyBtYXRy
aXhfcm93X21ldGhvZHMgewpwdWJsaWM6CiAgIGludCByb3dzKCkgY29uc3QgeyByZXR1cm4gcG06
OnJvd3Moc3RhdGljX2Nhc3Q8Y29uc3QgVG9wJj4oKnRoaXMpKS5zaXplKCk7IH0KfTsKdGVtcGxh
dGUgPHR5cGVuYW1lIF9NYXRyaXg+IGNsYXNzIFNlcmlhbGl6ZWQ7Cgp0ZW1wbGF0ZSA8dHlwZW5h
bWUgRT4gY2xhc3MgTWF0cml4Owp0ZW1wbGF0ZSA8dHlwZW5hbWUgVG9wLCB0eXBlbmFtZSBFPXR5
cGVuYW1lIFRvcDo6ZWxlbWVudF90eXBlPgpjbGFzcyBHZW5lcmljTWF0cml4CiAgIDogcHVibGlj
IEdlbmVyaWM8VG9wPiwgcHVibGljIG1hdHJpeF9yb3dfbWV0aG9kczxUb3A+IHsKcHJvdGVjdGVk
OgogICBHZW5lcmljTWF0cml4KCkgeyB9CiAgIEdlbmVyaWNNYXRyaXgoY29uc3QgR2VuZXJpY01h
dHJpeCYpIHsgfQpwdWJsaWM6CiAgIHR5cGVkZWYgR2VuZXJpY01hdHJpeCBnZW5lcmljX3R5cGU7
CiAgIHR5cGVkZWYgRSBlbGVtZW50X3R5cGU7Cn07Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgX01hdHJp
eD4gaW5saW5lCmNvbnN0IFJvd3M8X01hdHJpeD4mIHJvd3MoY29uc3QgR2VuZXJpY01hdHJpeDxf
TWF0cml4PiYgbSkgewogICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBSb3dzPF9NYXRy
aXg+Jj4obS50b3AoKSk7Cn0KCnRlbXBsYXRlIDx0eXBlbmFtZSBFPgpjbGFzcyBNYXRyaXggOiBw
dWJsaWMgR2VuZXJpY01hdHJpeDxNYXRyaXg8RT4sIEU+IHsKcHJvdGVjdGVkOgogICBpbnQgZGlt
ciwgZGltYzsKICAgRSogZGF0YTsKcHVibGljOgogICBNYXRyaXgoaW50IHIsIGludCBjKSA6IGRp
bXIociksIGRpbWMoYyksIGRhdGEobmV3IEVbcipjXSkgeyB9CiAgIGludCByb3dzKCkgY29uc3Qg
eyByZXR1cm4gZGltcjsgfQogICBpbnQgY29scygpIGNvbnN0IHsgcmV0dXJuIGRpbWM7IH0KCiAg
IGZyaWVuZCBjbGFzcyBTZXJpYWxpemVkPE1hdHJpeD47CiAgIGZyaWVuZCBjbGFzcyBHZW5lcmlj
TWF0cml4PE1hdHJpeD47Cn07Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgRT4KY2xhc3MgU2VyaWFsaXpl
ZDwgTWF0cml4PEU+ID4gewpwdWJsaWM6CiAgIGNvbnN0IE1hdHJpeDxFPiYgaGlkZGVuKCkgY29u
c3QgeyByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTWF0cml4PEU+Kj4odGhpcyk7IH0K
ICAgaW50IHNpemUoKSBjb25zdCB7IHJldHVybiBoaWRkZW4oKS5kaW1yICogaGlkZGVuKCkuZGlt
YzsgfQp9OwoKdGVtcGxhdGUgPHR5cGVuYW1lIEU+CmNsYXNzIE1hdHJpeF9maXJzdF9saW5lCiAg
IDogcHVibGljIGluZGV4ZWRfc3Vic2V0X2ltcGw8IE1hdHJpeF9maXJzdF9saW5lPEU+LAoJCQkJ
IFNlcmlhbGl6ZWQ8IE1hdHJpeDxFPiA+LCBTZXJpZXM8aW50PiA+IHsKICAgY29uc3QgTWF0cml4
PEU+JiBoaWRkZW4oKSBjb25zdCB7IHJldHVybiByZWludGVycHJldF9jYXN0PGNvbnN0IE1hdHJp
eDxFPiY+KCp0aGlzKTsgfQogICB0eXBlZGVmIGluZGV4ZWRfc3Vic2V0X2ltcGw8TWF0cml4X2Zp
cnN0X2xpbmU+IF9zdXBlcjsKcHJvdGVjdGVkOgogICB+TWF0cml4X2ZpcnN0X2xpbmUoKTsKcHVi
bGljOgogICB0eXBlbmFtZSBfc3VwZXI6OmNvbnRhaW5lcjEmIGdldF9jb250YWluZXIxKCkgewog
ICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx0eXBlbmFtZSBfc3VwZXI6OmNvbnRhaW5lcjEm
PihoaWRkZW4oKSk7CiAgIH0KICAgY29uc3QgdHlwZW5hbWUgX3N1cGVyOjpjb250YWluZXIxJiBn
ZXRfY29udGFpbmVyMSgpIGNvbnN0IHsKICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgdHlwZW5hbWUgX3N1cGVyOjpjb250YWluZXIxJj4oaGlkZGVuKCkpOwogICB9CgogICB0eXBl
bmFtZSBfc3VwZXI6OmNvbnRhaW5lcjIgZ2V0X2NvbnRhaW5lcjIoKSBjb25zdCB7CiAgICAgIHJl
dHVybiBjb250YWluZXIyKDAsIGhpZGRlbigpLnJvd3MoKSwgaGlkZGVuKCkuY29scygpKTsKICAg
fQp9OwoKdGVtcGxhdGUgPHR5cGVuYW1lIEU+CmNsYXNzIFJvd3M8IE1hdHJpeDxFPiA+CiAgIDog
cHVibGljIG1vZGlmaWVkX2NvbnRhaW5lcl9pbXBsPCBSb3dzPCBNYXRyaXg8RT4gPiwgTWF0cml4
X2ZpcnN0X2xpbmU8RT4gPiB7CiAgIHR5cGVkZWYgbW9kaWZpZWRfY29udGFpbmVyX2ltcGw8Um93
cz4gX3N1cGVyOwpwcm90ZWN0ZWQ6CiAgIH5Sb3dzKCk7CnB1YmxpYzoKICAgY29uc3QgdHlwZW5h
bWUgX3N1cGVyOjpjb250YWluZXImIGdldF9jb250YWluZXIoKSBjb25zdCB7CiAgICAgIHJldHVy
biByZWludGVycHJldF9jYXN0PGNvbnN0IHR5cGVuYW1lIF9zdXBlcjo6Y29udGFpbmVyJj4oKnRo
aXMpOwogICB9Cn07Cgp0ZW1wbGF0ZSA8Ym9vbCBzeW1tZXRyaWM9ZmFsc2U+CmNsYXNzIEluY2lk
ZW5jZU1hdHJpeCAgewogICBpbnQgczsKcHVibGljOgogICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4K
ICAgSW5jaWRlbmNlTWF0cml4KGludCBtLCBpbnQgbiwgY29uc3QgVCYgc3JjKSA6IHMoc3JjLnNp
emUoKSkgeyB9CgogICBpbnQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHM7IH0KfTsKCnN0cnVjdCB2
ZWNfbXVsIHsgfTsKCnRlbXBsYXRlIDx0eXBlbmFtZSBFLCB0eXBlbmFtZSBUb3AxLCB0eXBlbmFt
ZSBUb3AyPgpJbmNpZGVuY2VNYXRyaXg8PgppbmNpZGVuY2VfbWF0cml4KGNvbnN0IEdlbmVyaWNN
YXRyaXg8VG9wMSxFPiYgbTEsIGNvbnN0IEdlbmVyaWNNYXRyaXg8VG9wMixFPiYgbTIsCiAgICAg
ICAgICAgICAgICAgY29uc3QgZG91YmxlX3plcm8mIHByZWQpIHsKICAgcmV0dXJuIEluY2lkZW5j
ZU1hdHJpeDw+IChtMS5yb3dzKCksIG0yLnJvd3MoKSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBhdHRhY2hfb3BlcmF0aW9uKHByb2R1Y3Qocm93cyhtMSksIHJvd3MobTIpLCB2ZWNfbXVs
KCkpLCBwcmVkKSk7Cn0KCn07CgppbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKSB7CiAg
IGNvbnN0IGRvdWJsZSBlcHNpbG9uPSAxZS01OwogICBjb25zdCBwbTo6TWF0cml4PGRvdWJsZT4g
UigyLDIpLCBDKDIsMik7CgogICBjb25zdCBwbTo6SW5jaWRlbmNlTWF0cml4PD4gVklGPWluY2lk
ZW5jZV9tYXRyaXgoUiwgQywgcG06OmRvdWJsZV96ZXJvKGVwc2lsb24pKTsKCiAgIHJldHVybiBW
SUYuc2l6ZSgpOwp9Cg==


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: optimization/7247: copy constructor missing when inlining enabled for i386
@ 2002-07-11 14:06 Jason Merrill
  0 siblings, 0 replies; 4+ messages in thread
From: Jason Merrill @ 2002-07-11 14:06 UTC (permalink / raw)
  To: nobody; +Cc: gcc-prs

The following reply was made to PR optimization/7247; it has been noted by GNATS.

From: Jason Merrill <jason@redhat.com>
To: "H. J. Lu" <hjl@lucon.org>
Cc: gawrilow@math.tu-berlin.de, gcc-gnats@gcc.gnu.org,
	gcc-bugs@gcc.gnu.org
Subject: Re: optimization/7247: copy constructor missing when inlining
 enabled for i386
Date: Thu, 11 Jul 2002 22:02:12 +0100

 >>>>> "H" == H J Lu <hjl@lucon.org> writes:
 
 > Jason, it looks like your patch doesn't catch this one.
 
 No, as the bug isn't related to the NRVO; this testcase doesn't have any
 returns which would be affected.  Rather, it seems to be a dependency
 tracking bug.  I can reproduce the bug by adding 'inline' to the definition
 of incidence_matrix and compiling with -O -fschedule-insns2.  Without
 -fschedule-insns2, the code leading up to the dump_op calls looks like
 
         movl    -96(%ebp), %eax
         movl    -92(%ebp), %edx
         movl    %eax, -52(%ebp)
         movl    %edx, -48(%ebp)
         leal    -96(%ebp), %eax
         movl    %eax, (%esp)
         call    pm::dump_op(pm::double_zero const&)
         leal    -52(%ebp), %eax
         movl    %eax, (%esp)
         call    pm::dump_op(pm::double_zero const&)
 
 so the epsilon value is properly copied before it is dumped.  But with
 scheduling, it looks like
 
         movl    -96(%ebp), %eax
         movl    %eax, -52(%ebp)
         leal    -96(%ebp), %eax
         movl    %eax, (%esp)
         call    pm::dump_op(pm::double_zero const&)
         leal    -52(%ebp), %eax
         movl    %eax, (%esp)
         call    pm::dump_op(pm::double_zero const&)
 
 Which suggests that the scheduler incorrectly decides that the second word
 wasn't used by the call and optimizes away the copy.  This bug, or a
 similar one, seems still to be present in the trunk, though to see it you
 also need to move the definition of the double_zero constructor outside the
 class, so it is not inlined.
 
 Jason


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: optimization/7247: copy constructor missing when inlining enabled for i386
@ 2002-07-10  2:16 Ewgenij Gawrilow
  0 siblings, 0 replies; 4+ messages in thread
From: Ewgenij Gawrilow @ 2002-07-10  2:16 UTC (permalink / raw)
  To: nobody; +Cc: gcc-prs

The following reply was made to PR optimization/7247; it has been noted by GNATS.

From: Ewgenij Gawrilow <gawrilow@math.TU-Berlin.DE>
To: nathan@gcc.gnu.org
Cc: gcc-bugs@gcc.gnu.org, gcc-gnats@gcc.gnu.org, gcc-prs@gcc.gnu.org
Subject: Re: optimization/7247: copy constructor missing when inlining enabled for i386
Date: Wed, 10 Jul 2002 11:07:57 +0200

 >>>>> "nathan" == nathan  <nathan@gcc.gnu.org> writes:
 
     nathan> Synopsis: copy constructor missing when inlining enabled
     nathan> for i386
 
     nathan> If I understand you correctly, you are
     nathan> complaining that a copy ctor call is being optimized away.
     nathan> This is allowed, under [12.8]/15, even if the copy ctor
     nathan> has side-effects
 
 The class whose construction fails is defined in my test case
 as follows:
 
 struct double_zero {
    const double epsilon;
 
    double_zero(const double& epsilon_arg=1e-8) : epsilon(epsilon_arg) { }
 };
 
 One would expect from a copy constructor, especially from the implicit
 one, that it would copy the value of the instance variable
 "epsilon". I don't think this could fall under the definition of a side effect.
 
 Alternatively, if optimization according to the clause [12.8]/15 comes
 into effect here, as you mean, then it is the constructor
 double_zero(const double&) that is being forgotten. At any rate, the
 "epsilon" variable contains garbage after the construction, as shows up
 in the debugging output.
 
 Encouraged by such a quick response, I hope for a similarly quick fix :-)
 
 With best regards,
 Ewgenij Gawrilow


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: optimization/7247: copy constructor missing when inlining enabled for i386
@ 2002-07-09 12:07 nathan
  0 siblings, 0 replies; 4+ messages in thread
From: nathan @ 2002-07-09 12:07 UTC (permalink / raw)
  To: gawrilow, gcc-bugs, gcc-prs, nobody

Synopsis: copy constructor missing when inlining enabled for i386

State-Changed-From-To: open->feedback
State-Changed-By: nathan
State-Changed-When: Tue Jul  9 12:07:05 2002
State-Changed-Why:
    If I understand you correctly, you are complaining that
    a copy ctor call is being optimized away.
    This is allowed, under [12.8]/15, even if the copy ctor
    has side-effects

http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&pr=7247


^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2002-07-11 21:06 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2002-07-09 10:26 optimization/7247: copy constructor missing when inlining enabled for i386 gawrilow
2002-07-09 12:07 nathan
2002-07-10  2:16 Ewgenij Gawrilow
2002-07-11 14:06 Jason Merrill

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).