Skip to content
Snippets Groups Projects
  • Richard Biener's avatar
    3bd61c1d
    middle-end/119119 - re-gimplification of empty CTOR assignments · 3bd61c1d
    Richard Biener authored
    The following testcase runs into a re-gimplification issue during
    inlining when processing
    
      MEM[(struct e *)this_2(D)].a = {};
    
    where re-gimplification does not handle assignments in the same
    way than the gimplifier but instead relies on rhs_predicate_for
    and gimplifying the RHS standalone.  This fails to handle
    special-casing of CTORs.  The is_gimple_mem_rhs_or_call predicate
    already handles clobbers but not empty CTORs so we end up in
    the fallback code trying to force the CTOR into a separate stmt
    using a temporary - but as we have a non-copyable type here that ICEs.
    
    The following generalizes empty CTORs in is_gimple_mem_rhs_or_call
    since those need no additional re-gimplification.
    
    	PR middle-end/119119
    	* gimplify.cc (is_gimple_mem_rhs_or_call): All empty CTORs
    	are OK when not a register type.
    
    	* g++.dg/torture/pr11911.C: New testcase.
    3bd61c1d
    History
    middle-end/119119 - re-gimplification of empty CTOR assignments
    Richard Biener authored
    The following testcase runs into a re-gimplification issue during
    inlining when processing
    
      MEM[(struct e *)this_2(D)].a = {};
    
    where re-gimplification does not handle assignments in the same
    way than the gimplifier but instead relies on rhs_predicate_for
    and gimplifying the RHS standalone.  This fails to handle
    special-casing of CTORs.  The is_gimple_mem_rhs_or_call predicate
    already handles clobbers but not empty CTORs so we end up in
    the fallback code trying to force the CTOR into a separate stmt
    using a temporary - but as we have a non-copyable type here that ICEs.
    
    The following generalizes empty CTORs in is_gimple_mem_rhs_or_call
    since those need no additional re-gimplification.
    
    	PR middle-end/119119
    	* gimplify.cc (is_gimple_mem_rhs_or_call): All empty CTORs
    	are OK when not a register type.
    
    	* g++.dg/torture/pr11911.C: New testcase.