[Bug c++/87436] [6/7/8/9 Regression] G++ produces >300MB .rodata section to initialize struct with big array
rguenth at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Wed Sep 26 09:30:00 GMT 2018
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87436
Richard Biener <rguenth at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Priority|P3 |P2
Status|UNCONFIRMED |NEW
Last reconfirmed| |2018-09-26
Known to work| |4.8.5
Version|5.4.0 |8.2.1
Target Milestone|--- |6.5
Summary|G++ produces >300MB .rodata |[6/7/8/9 Regression] G++
|section to initialize |produces >300MB .rodata
|struct with big array |section to initialize
| |struct with big array
Ever confirmed|0 |1
Known to fail| |8.2.1
--- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> ---
Confirmed with GCC 8. I think the issue is that FooGrid::FooGrid _is_
constexpr as can be seen in dumps:
;; Function constexpr FooGrid::FooGrid() (null)
;; enabled by -tree-original
{
<<cleanup_point <<< Unknown tree: expr_stmt
(void) (((struct FooGrid *) this)->arr = <<< Unknown tree: vec_init_expr
D.2204
>>>) >>>>>;
}
and that we lower this VEC_INIT_EXPR to just
FooGrid::FooGrid (struct FooGrid * const this)
{
this->arr = *.LC0;
}
GCC 4.8 compiles this instantanously.
More information about the Gcc-bugs
mailing list