https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98326
Jakub Jelinek <jakub at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |jakub at gcc dot gnu.org, | |jason at gcc dot gnu.org --- Comment #2 from Jakub Jelinek <jakub at gcc dot gnu.org> --- So, shouldn't either the cp/call.c change have been: - && ! TREE_ADDRESSABLE (TREE_TYPE (arg))) + && ! TREE_ADDRESSABLE (TREE_TYPE (arg)) + && simple_empty_class_p (TREE_TYPE (arg), arg, INIT_EXPR)) rather than - && ! TREE_ADDRESSABLE (TREE_TYPE (arg))) + && simple_empty_class_p (TREE_TYPE (arg), arg, INIT_EXPR)) so it would don't try to handle TREE_ADDRESSABLE classes this way? Or perhaps simple_empty_class_p should punt for TREE_ADDRESSABLE types? In any case, passing CONSTRUCTOR with TREE_ADDRESSABLE type directly as argument to function call leads to creating temporaries of the type, which aren't allowed.