https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85363

--- Comment #2 from Jonathan Wakely <redi at gcc dot gnu.org> ---
In C++11 mode the compiler emits a constructor for P:

;; Function constexpr P::P() (null)
;; enabled by -tree-original


{
  <<cleanup_point <<< Unknown tree: expr_stmt
  (void) (((struct P *) this)->x = TARGET_EXPR <D.5293, <<< Unknown tree:
aggr_init_expr
  5
  __ct_comp 
  D.5293
  (struct X *) <<< Unknown tree: void_cst >>>
  20 >>>>) >>>>>;
}


And the initialization of p{} in main is different:

;; Function int main() (null)
;; enabled by -tree-original


{
  <<< Unknown tree: try_block
  {
    struct P p;

        struct P p;
    <<cleanup_point <<< Unknown tree: expr_stmt
  (void) (p = <<< Unknown tree: aggr_init_expr
  4
  __ct_comp 
  D.5358
  (struct P *) <<< Unknown tree: void_cst >>> >>>) >>>>>;
  }
  <<< Unknown tree: handler

  try
    {
      <<cleanup_point <<< Unknown tree: expr_stmt
  (void) __cxa_begin_catch (__builtin_eh_pointer (0)) >>>>>;
      return <retval> = 0;
    }
  finally
    {
      __cxa_end_catch ();
    } >>> >>>;
  return <retval> = 1;
}
return <retval> = 0;


Whereas in C++14 mode p.x gets constructed directly:

;; Function int main() (null)
;; enabled by -tree-original


{
  <<< Unknown tree: try_block
  {
    struct P p;

        struct P p;
    <<cleanup_point <<< Unknown tree: expr_stmt
  p.x = TARGET_EXPR <D.5485, <<< Unknown tree: aggr_init_expr
  5
  __ct_comp 
  D.5485
  (struct X *) <<< Unknown tree: void_cst >>>
  20 >>>> >>>>>;
  }
  <<< Unknown tree: handler

  try
    {
      <<cleanup_point <<< Unknown tree: expr_stmt
  (void) __cxa_begin_catch (__builtin_eh_pointer (0)) >>>>>;
      return <retval> = 0;
    }
  finally
    {
      __cxa_end_catch ();
    } >>> >>>;
  return <retval> = 1;
}
return <retval> = 0;

Reply via email to