public inbox for gcc-bugs@sourceware.org help / color / mirror / Atom feed
* [Bug c++/57175] New: NRVO and alignment @ 2013-05-05 13:28 glisse at gcc dot gnu.org 2013-05-05 13:30 ` [Bug c++/57175] " paolo.carlini at oracle dot com ` (2 more replies) 0 siblings, 3 replies; 4+ messages in thread From: glisse at gcc dot gnu.org @ 2013-05-05 13:28 UTC (permalink / raw) To: gcc-bugs http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57175 Bug #: 57175 Summary: NRVO and alignment Classification: Unclassified Product: gcc Version: 4.9.0 Status: UNCONFIRMED Keywords: wrong-code Severity: normal Priority: P3 Component: c++ AssignedTo: unassigned@gcc.gnu.org ReportedBy: glisse@gcc.gnu.org Hello, in typeck.c (check_return_expr), before applying the NRV optimization, there is a check: DECL_ALIGN (retval) >= DECL_ALIGN (result) It seems to me that this check is backwards and should be <= instead (compare with tree_nrv in tree-nrv.c which seems correct). #include <iostream> struct A { A(){std::cerr<<"A()\n";} ~A(){std::cerr<<"~A()\n";} A(A&&){std::cerr<<"A(A&&)\n";} A(A const&){std::cerr<<"A(A const&)\n";} }; A f(){ alignas(32) A x; return x; } int main(){ f(); } If I understand NRVO properly, main reserves memory for the return value of f and passes f the address of that memory. f then decides to use that memory directly for x instead of allocating new memory that would have to be copied later. So the return memory needs to be at least as aligned as x, not the reverse (I think retval corresponds to x here). Current g++ does the elision on this code. If I change >= to <=, it inhibits the elision. ^ permalink raw reply [flat|nested] 4+ messages in thread
* [Bug c++/57175] NRVO and alignment 2013-05-05 13:28 [Bug c++/57175] New: NRVO and alignment glisse at gcc dot gnu.org @ 2013-05-05 13:30 ` paolo.carlini at oracle dot com 2013-05-05 23:34 ` paolo.carlini at oracle dot com 2013-05-20 7:52 ` glisse at gcc dot gnu.org 2 siblings, 0 replies; 4+ messages in thread From: paolo.carlini at oracle dot com @ 2013-05-05 13:30 UTC (permalink / raw) To: gcc-bugs http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57175 Paolo Carlini <paolo.carlini at oracle dot com> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |jason at gcc dot gnu.org --- Comment #1 from Paolo Carlini <paolo.carlini at oracle dot com> 2013-05-05 13:30:53 UTC --- CCing Jason. ^ permalink raw reply [flat|nested] 4+ messages in thread
* [Bug c++/57175] NRVO and alignment 2013-05-05 13:28 [Bug c++/57175] New: NRVO and alignment glisse at gcc dot gnu.org 2013-05-05 13:30 ` [Bug c++/57175] " paolo.carlini at oracle dot com @ 2013-05-05 23:34 ` paolo.carlini at oracle dot com 2013-05-20 7:52 ` glisse at gcc dot gnu.org 2 siblings, 0 replies; 4+ messages in thread From: paolo.carlini at oracle dot com @ 2013-05-05 23:34 UTC (permalink / raw) To: gcc-bugs http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57175 --- Comment #3 from Paolo Carlini <paolo.carlini at oracle dot com> 2013-05-05 23:34:52 UTC --- Thanks Eric. Without further ado, I would simply encourage Marc to send a patchlet to the mailing list (possibly with a nice testcase). Thanks! ^ permalink raw reply [flat|nested] 4+ messages in thread
* [Bug c++/57175] NRVO and alignment 2013-05-05 13:28 [Bug c++/57175] New: NRVO and alignment glisse at gcc dot gnu.org 2013-05-05 13:30 ` [Bug c++/57175] " paolo.carlini at oracle dot com 2013-05-05 23:34 ` paolo.carlini at oracle dot com @ 2013-05-20 7:52 ` glisse at gcc dot gnu.org 2 siblings, 0 replies; 4+ messages in thread From: glisse at gcc dot gnu.org @ 2013-05-20 7:52 UTC (permalink / raw) To: gcc-bugs http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57175 Marc Glisse <glisse at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |RESOLVED Resolution|--- |FIXED --- Comment #4 from Marc Glisse <glisse at gcc dot gnu.org> --- r199093 | glisse | 2013-05-20 09:50:54 +0200 (Mon, 20 May 2013) | 10 lines 2013-05-20 Marc Glisse <marc.glisse@inria.fr> PR c++/57175 gcc/cp/ * typeck.c (check_return_expr): Reverse the alignment comparison. gcc/testsuite/ * g++.dg/pr57175.C: New testcase. ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2013-05-20 7:52 UTC | newest] Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2013-05-05 13:28 [Bug c++/57175] New: NRVO and alignment glisse at gcc dot gnu.org 2013-05-05 13:30 ` [Bug c++/57175] " paolo.carlini at oracle dot com 2013-05-05 23:34 ` paolo.carlini at oracle dot com 2013-05-20 7:52 ` glisse at gcc dot gnu.org
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).