public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug c++/115291] New: armv8-a GCC emits float32x2_t loads from uninitialized stack
@ 2024-05-30 10:02 akihiko.odaki at daynix dot com
2024-05-30 12:14 ` [Bug c++/115291] " pinskia at gcc dot gnu.org
` (2 more replies)
0 siblings, 3 replies; 4+ messages in thread
From: akihiko.odaki at daynix dot com @ 2024-05-30 10:02 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115291
Bug ID: 115291
Summary: armv8-a GCC emits float32x2_t loads from uninitialized
stack
Product: gcc
Version: 14.1.1
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: akihiko.odaki at daynix dot com
Target Milestone: ---
Run the following commands:
git clone https://gitlab.com/libeigen/eigen.git -b
38b9cc263bbaeb03ce408a4e26084543a6c0dedb
cat main.cpp <<'EOF'
#include "Eigen/Core"
auto f() -> Eigen::Matrix2f {
return Eigen::Matrix2f::Zero();
}
auto g() -> Eigen::Vector2f {
auto v = Eigen::Product(f(), Eigen::Vector2f::Zero());
return v;
}
EOF
c++ -Ieigen -O1 -DNDEBUG main.cpp -S
Now main.s looks like:
.arch armv8-a
.file "main.cpp"
.text
.align 2
.global _Z1fv
.type _Z1fv, %function
_Z1fv:
.LFB13241:
.cfi_startproc
mov x0, x8
str wzr, [x8]
str wzr, [x8, 4]
str wzr, [x8, 8]
str wzr, [x8, 12]
ret
.cfi_endproc
.LFE13241:
.size _Z1fv, .-_Z1fv
.align 2
.global _Z1gv
.type _Z1gv, %function
_Z1gv:
.LFB13246:
.cfi_startproc
sub sp, sp, #16
.cfi_def_cfa_offset 16
mov x0, x8
movi v30.2s, 0
ldr d31, [sp]
fmul v31.2s, v31.2s, v30.2s
ldr d29, [sp, 8]
fmla v31.2s, v29.2s, v30.2s
str d31, [x8]
add sp, sp, 16
.cfi_def_cfa_offset 0
ret
.cfi_endproc
.LFE13246:
.size _Z1gv, .-_Z1gv
.align 2
.type _GLOBAL__sub_I__Z1fv, %function
_GLOBAL__sub_I__Z1fv:
.LFB14439:
.cfi_startproc
ret
.cfi_endproc
.LFE14439:
.size _GLOBAL__sub_I__Z1fv, .-_GLOBAL__sub_I__Z1fv
.ident "GCC: (GNU) 14.1.1 20240507 (Red Hat 14.1.1-1)"
.section .note.GNU-stack,"",@progbits
In _Z1gv, "ldr d31, [sp]" loads values from nowhere.
^ permalink raw reply [flat|nested] 4+ messages in thread
* [Bug c++/115291] armv8-a GCC emits float32x2_t loads from uninitialized stack
2024-05-30 10:02 [Bug c++/115291] New: armv8-a GCC emits float32x2_t loads from uninitialized stack akihiko.odaki at daynix dot com
@ 2024-05-30 12:14 ` pinskia at gcc dot gnu.org
2024-05-30 22:39 ` pinskia at gcc dot gnu.org
2024-05-31 7:03 ` akihiko.odaki at daynix dot com
2 siblings, 0 replies; 4+ messages in thread
From: pinskia at gcc dot gnu.org @ 2024-05-30 12:14 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115291
Andrew Pinski <pinskia at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Resolution|--- |INVALID
Status|UNCONFIRMED |RESOLVED
--- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
D.198035 = f (); [return slot optimization]
v.m_lhs = &D.198035;
MEM[(struct CwiseNullaryOp *)&v + 8B] ={v} {CLOBBER(bob)};
MEM[(struct scalar_constant_op *)&v + 12B] ={v} {CLOBBER(bob)};
MEM[(struct scalar_constant_op *)&v + 12B].m_other = 0.0;
D.198035 ={v} {CLOBBER(eos)};
_6 = &MEM[(struct Matrix *)_4(D)].D.198029;
_12 = v.m_lhs;
auto v = Eigen::Product(f(), Eigen::Vector2f::Zero());
The bug is there is a temporary created for the return value of f but that is
destoried at the end of the full statement but the product does not happen
until afterwards in the use of v happens.
Rewriting the code like:
```
auto t = f();
auto v = Eigen::Product(t, Eigen::Vector2f::Zero());
```
Fixes the code.
^ permalink raw reply [flat|nested] 4+ messages in thread
* [Bug c++/115291] armv8-a GCC emits float32x2_t loads from uninitialized stack
2024-05-30 10:02 [Bug c++/115291] New: armv8-a GCC emits float32x2_t loads from uninitialized stack akihiko.odaki at daynix dot com
2024-05-30 12:14 ` [Bug c++/115291] " pinskia at gcc dot gnu.org
@ 2024-05-30 22:39 ` pinskia at gcc dot gnu.org
2024-05-31 7:03 ` akihiko.odaki at daynix dot com
2 siblings, 0 replies; 4+ messages in thread
From: pinskia at gcc dot gnu.org @ 2024-05-30 22:39 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115291
--- Comment #2 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
See https://libeigen.gitlab.io/docs/TopicPitfalls.html
section "C++11 and the auto keyword" explictly.
"In short: do not use the auto keywords with Eigen's expressions, unless you
are 100% sure about what you are doing. In particular, do not use the auto
keyword as a replacement for a Matrix<> type."
Describes the issue you are having.
^ permalink raw reply [flat|nested] 4+ messages in thread
* [Bug c++/115291] armv8-a GCC emits float32x2_t loads from uninitialized stack
2024-05-30 10:02 [Bug c++/115291] New: armv8-a GCC emits float32x2_t loads from uninitialized stack akihiko.odaki at daynix dot com
2024-05-30 12:14 ` [Bug c++/115291] " pinskia at gcc dot gnu.org
2024-05-30 22:39 ` pinskia at gcc dot gnu.org
@ 2024-05-31 7:03 ` akihiko.odaki at daynix dot com
2 siblings, 0 replies; 4+ messages in thread
From: akihiko.odaki at daynix dot com @ 2024-05-31 7:03 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115291
--- Comment #3 from Akihiko Odaki <akihiko.odaki at daynix dot com> ---
You are right. Sorry for bothering and thanks for pointing out the issue in the
code (and even the relevant documentation!)
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2024-05-31 7:03 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-05-30 10:02 [Bug c++/115291] New: armv8-a GCC emits float32x2_t loads from uninitialized stack akihiko.odaki at daynix dot com
2024-05-30 12:14 ` [Bug c++/115291] " pinskia at gcc dot gnu.org
2024-05-30 22:39 ` pinskia at gcc dot gnu.org
2024-05-31 7:03 ` akihiko.odaki at daynix dot com
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).