REGRESSION: bulk upcxx::rput with completions upcxx::source_cx::as_future() | upcxx::operation_cx::as_future() fails to compile

Issue #380 resolved
Max Grossman created an issue

When building this reproducer (upcxx -O3 tmp.cpp):

#include <upcxx/upcxx.hpp>

int main(int argc, char **argv) {
    uint8_t *src = NULL;
    upcxx::global_ptr<uint8_t> dst;
    upcxx::rput(src, dst, 3, upcxx::operation_cx::as_future() | upcxx::source_cx::as_future());
    return 0;
}

I receive the following compile-time errors:

[jmg3@login4.summit upcxx_build]$ upcxx -O3 tmp.cpp
In file included from /gpfs/alpine/world-shared/csc296/summit/upcxx/gcc-8.1.1/2020.3.0/upcxx.O3.gasnet_seq.ibv/include/upcxx/copy.hpp:8,
                 from /gpfs/alpine/world-shared/csc296/summit/upcxx/gcc-8.1.1/2020.3.0/upcxx.O3.gasnet_seq.ibv/include/upcxx/upcxx.hpp:22,
                 from tmp.cpp:1:
/gpfs/alpine/world-shared/csc296/summit/upcxx/gcc-8.1.1/2020.3.0/upcxx.O3.gasnet_seq.ibv/include/upcxx/rput.hpp: In instantiation of 'void upcxx::detail::rput_src_handle_cb<Obj, Traits, true, op_is_handle>::add_op_suc(upcxx::backend::gasnet::handle_cb_successor, std::true_type) [with Obj = upcxx::detail::rput_obj<upcxx::completions<upcxx::future_cx<upcxx::operation_cx_event, (upcxx::progress_level)1>, upcxx::future_cx<upcxx::source_cx_event, (upcxx::progress_level)1> >, upcxx::detail::rput_traits<upcxx::completions<upcxx::future_cx<upcxx::operation_cx_event, (upcxx::progress_level)1>, upcxx::future_cx<upcxx::source_cx_event, (upcxx::progress_level)1> >, false> >; Traits = upcxx::detail::rput_traits<upcxx::completions<upcxx::future_cx<upcxx::operation_cx_event, (upcxx::progress_level)1>, upcxx::future_cx<upcxx::source_cx_event, (upcxx::progress_level)1> >, false>; bool op_is_handle = true; std::true_type = std::integral_constant<bool, true>]':
/gpfs/alpine/world-shared/csc296/summit/upcxx/gcc-8.1.1/2020.3.0/upcxx.O3.gasnet_seq.ibv/include/upcxx/rput.hpp:122:9:   required from 'void upcxx::detail::rput_src_handle_cb<Obj, Traits, true, op_is_handle>::execute_and_delete(upcxx::backend::gasnet::handle_cb_successor) [with Obj = upcxx::detail::rput_obj<upcxx::completions<upcxx::future_cx<upcxx::operation_cx_event, (upcxx::progress_level)1>, upcxx::future_cx<upcxx::source_cx_event, (upcxx::progress_level)1> >, upcxx::detail::rput_traits<upcxx::completions<upcxx::future_cx<upcxx::operation_cx_event, (upcxx::progress_level)1>, upcxx::future_cx<upcxx::source_cx_event, (upcxx::progress_level)1> >, false> >; Traits = upcxx::detail::rput_traits<upcxx::completions<upcxx::future_cx<upcxx::operation_cx_event, (upcxx::progress_level)1>, upcxx::future_cx<upcxx::source_cx_event, (upcxx::progress_level)1> >, false>; bool op_is_handle = true]'
/gpfs/alpine/world-shared/csc296/summit/upcxx/gcc-8.1.1/2020.3.0/upcxx.O3.gasnet_seq.ibv/include/upcxx/rput.hpp:119:12:   required from here
/gpfs/alpine/world-shared/csc296/summit/upcxx/gcc-8.1.1/2020.3.0/upcxx.O3.gasnet_seq.ibv/include/upcxx/rput.hpp:113:13: error: invalid static_cast from type 'upcxx::detail::rput_src_handle_cb<upcxx::detail::rput_obj<upcxx::completions<upcxx::future_cx<upcxx::operation_cx_event, (upcxx::progress_level)1>, upcxx::future_cx<upcxx::source_cx_event, (upcxx::progress_level)1> >, upcxx::detail::rput_traits<upcxx::completions<upcxx::future_cx<upcxx::operation_cx_event, (upcxx::progress_level)1>, upcxx::future_cx<upcxx::source_cx_event, (upcxx::progress_level)1> >, false> >, upcxx::detail::rput_traits<upcxx::completions<upcxx::future_cx<upcxx::operation_cx_event, (upcxx::progress_level)1>, upcxx::future_cx<upcxx::source_cx_event, (upcxx::progress_level)1> >, false>, true, true>*' to type 'upcxx::detail::rput_op_handle_cb<upcxx::detail::rput_obj<upcxx::completions<upcxx::future_cx<upcxx::operation_cx_event, (upcxx::progress_level)1>, upcxx::future_cx<upcxx::source_cx_event, (upcxx::progress_level)1> >, upcxx::detail::rput_traits<upcxx::completions<upcxx::future_cx<upcxx::operation_cx_event, (upcxx::progress_level)1>, upcxx::future_cx<upcxx::source_cx_event, (upcxx::progress_level)1> >, false> >, upcxx::detail::rput_traits<upcxx::completions<upcxx::future_cx<upcxx::operation_cx_event, (upcxx::progress_level)1>, upcxx::future_cx<upcxx::source_cx_event, (upcxx::progress_level)1> >, false>, true>*'
         suc(static_cast<rput_op_handle_cb<Obj,Traits,true>*>(this));
             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Per discussion on slack, this appears to be a regression introduced with https://bitbucket.org/berkeleylab/upcxx/pull-requests/110.

Comments (7)

  1. Dan Bonachea

    Merging release upcxx-2020.3.2

    • upcxx-2020.3: ChangeLog: update release date 2020.3.2 package version bumps Make future and serialization tests "full" upc++ ChangeLog cleanups Update ChangeLog
    • Added test/regression/issue380.cpp - Fixed issue 380 where rput with source+operation cx failed to compile. Fix issue 368. Needed to add a default constructor for bcast_payload_header in runtime.hpp since it has a union containing a non-trivially constructible member (std::atomic). Add a Serialization example with an abstract base class ChangeLog.md bugfix entry Bugfix issue 369. <completion>::as_future() was typically leaking a small 56 byte heap struct per completion notification due to a refcount bungling in detail::persona_tls::fulfill_during_user_of_active(). configure: search PATH for python3 and python2 configure: implement check_tool_path() Update ChangeLog Add issue371 test Fix issue 371: team_id's are not "universal" as documented Update ChangeLog Add issue343 test fix issue 343: ensure that default-construced team_id provide a unique invalid team_id Update ChangeLog Improve bad_shared_alloc to output shared heap status Add a test to demonstrate shared heap allocation failures Tweak shared heap allocation exceptions test/memberof.cpp: silence a harmless warning with -std=c++2a docs: revise Intel/libstdc++ recommendation bench/misc_perf: avoid C++20 deprecation warnings INSTALL.md: Clarify recommendations for using parallel make ChangeLog.md: list fix #356 Fully qualified std::foo to ::std::foo in UPCXX_SERIALIZED_FOO macros. For members injected into user classes by UPCXX_SERIALIZED_* macros: This fixes issue 356 where non-public constructors were inaccessible to UCPXX_SERIALIZED_XXX macros. The fix entails smuggling a public static function into the class that then calls the constructor. Add issue356 regression test Update ChangeLog ChangeLog: document CROSS to UPCXX_CROSS rename configure: automatically cross-compile on Cray XC Start a ChangeLog for hotfix release

    → <<cset e35f012d9670>>

  2. Log in to comment