http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52988

Jonathan Wakely <redi at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|ASSIGNED                    |NEW
         AssignedTo|redi at gcc dot gnu.org     |unassigned at gcc dot
                   |                            |gnu.org

--- Comment #4 from Jonathan Wakely <redi at gcc dot gnu.org> 2012-04-28 
20:17:35 UTC ---
Unassigning myself as I think this is a FE issue.

I haven't been able to reduce this to something smaller but
-fdump-tree-original also shows the nullptr_t case just returns without
invoking the deferred function:

for future<int> it's OK

;; Function _Res std::future<_Res>::get() [with _Res = int] (null)
;; enabled by -tree-original

{
  struct _Reset __reset;

    struct _Reset __reset;
  <<cleanup_point <<< Unknown tree: expr_stmt
  std::__basic_future<int>::_Reset::_Reset (&__reset, (struct __basic_future &)
&((struct future *) this)->D.52275) >>>>>;
  try
    {
      <<cleanup_point return <retval> = *std::move<int&> ((int &) (int *)
std::__future_base::_Result<int>::_M_value ((struct _Result *)
std::__basic_future<int>::_M_get_result (&((struct future *)
this)->D.52275)))>>;
    }
  finally
    {
      std::__basic_future<int>::_Reset::~_Reset (&__reset);
    }
}

And for future<nullptr_t> it's not

;; Function _Res std::future<_Res>::get() [with _Res = std::nullptr_t] (null)
;; enabled by -tree-original

{
  struct _Reset __reset;

    struct _Reset __reset;
  <<cleanup_point <<< Unknown tree: expr_stmt
  std::__basic_future<std::nullptr_t>::_Reset::_Reset (&__reset, (struct
__basic_future &) &((struct future *) this)->D.51987) >>>>>;
  try
    {
      return <retval> = 0;
    }
  finally
    {
      std::__basic_future<std::nullptr_t>::_Reset::~_Reset (&__reset);
    }
}

Reply via email to