Warning on GCC 11 w/LTO and default eager completion about deleting non-heap object the_always

Issue #485 resolved
Amir Kamil created an issue

Replication on Dirac:

$ export 'CC=/usr/local/pkg/gcc/11.1.0/bin/gcc -flto=4 -fuse-linker-plugin -ffat-lto-objects' 'CXX=/usr/local/pkg/gcc/11.1.0/bin/g++ -flto=4 -fuse-linker-plugin -ffat-lto-objects'
$ ./configure --disable-auto-conduit-detect --with-default-network=smp --enable-single=opt --disable-kind-cuda-uva
$ make
$ ./bin/upcxx -O -DUPCXX_DEFER_COMPLETION=0 bench/nebr_exchange.cpp 
INFO: may need to build the required runtime.  Please be patient.
In function ‘operator delete’,
    inlined from ‘drop_for_proxied’ at /home/pagoda1/akamil/upcxx/bld/upcxx.assert0.optlev3.dbgsym0.gasnet_seq.smp/include/upcxx/future/core.hpp:862:55,
    inlined from ‘__ct_base ’ at /home/pagoda1/akamil/upcxx/bld/upcxx.assert0.optlev3.dbgsym0.gasnet_seq.smp/include/upcxx/future/impl_shref.hpp:166:52,
    inlined from ‘__ct ’ at /home/pagoda1/akamil/upcxx/bld/upcxx.assert0.optlev3.dbgsym0.gasnet_seq.smp/include/upcxx/future/impl_shref.hpp:217:65,
    inlined from ‘__ct ’ at /home/pagoda1/akamil/upcxx/bld/upcxx.assert0.optlev3.dbgsym0.gasnet_seq.smp/include/upcxx/future/impl_shref.hpp:226:9,
    inlined from ‘__ct ’ at /home/pagoda1/akamil/upcxx/bld/upcxx.assert0.optlev3.dbgsym0.gasnet_seq.smp/include/upcxx/future/then.hpp:63:9,
    inlined from ‘make_header’ at /home/pagoda1/akamil/upcxx/bld/upcxx.assert0.optlev3.dbgsym0.gasnet_seq.smp/include/upcxx/future/then.hpp:87:11,
    inlined from ‘operator()’ at /home/pagoda1/akamil/upcxx/bld/upcxx.assert0.optlev3.dbgsym0.gasnet_seq.smp/include/upcxx/future/then.hpp:149:87,
    inlined from ‘then’ at /home/pagoda1/akamil/upcxx/bld/upcxx.assert0.optlev3.dbgsym0.gasnet_seq.smp/include/upcxx/future/future1.hpp:279:7,
    inlined from ‘operator()’ at bench/nebr_exchange.cpp:194:12,
    inlined from ‘operator()’ at /home/pagoda1/akamil/upcxx/bld/upcxx.assert0.optlev3.dbgsym0.gasnet_seq.smp/include/upcxx/bind.hpp:229:62,
    inlined from ‘operator()’ at /home/pagoda1/akamil/upcxx/bld/upcxx.assert0.optlev3.dbgsym0.gasnet_seq.smp/include/upcxx/future/apply.hpp:132:64,
    inlined from ‘operator()’ at /home/pagoda1/akamil/upcxx/bld/upcxx.assert0.optlev3.dbgsym0.gasnet_seq.smp/include/upcxx/future/impl_then_lazy.hpp:264:9,
    inlined from ‘operator()’ at /home/pagoda1/akamil/upcxx/bld/upcxx.assert0.optlev3.dbgsym0.gasnet_seq.smp/include/upcxx/future/apply.hpp:132:64,
    inlined from ‘operator()’ at /home/pagoda1/akamil/upcxx/bld/upcxx.assert0.optlev3.dbgsym0.gasnet_seq.smp/include/upcxx/future/impl_then_lazy.hpp:264:9,
    inlined from ‘operator()’ at /home/pagoda1/akamil/upcxx/bld/upcxx.assert0.optlev3.dbgsym0.gasnet_seq.smp/include/upcxx/future/apply.hpp:121:85,
    inlined from ‘operator()’ at /home/pagoda1/akamil/upcxx/bld/upcxx.assert0.optlev3.dbgsym0.gasnet_seq.smp/include/upcxx/future/apply.hpp:211:126,
    inlined from ‘leave_active’ at /home/pagoda1/akamil/upcxx/bld/upcxx.assert0.optlev3.dbgsym0.gasnet_seq.smp/include/upcxx/future/then.hpp:68:14:
/home/pagoda1/akamil/upcxx/bld/upcxx.assert0.optlev3.dbgsym0.gasnet_seq.smp/include/upcxx/future/core.hpp:46:7: warning: ‘operator delete’ called on unallocated object ‘the_always’ [-Wfree-nonheap-object]
   46 |       UPCXX_OPNEW_AS_STD
      |       ^
/home/pagoda1/akamil/upcxx/bld/upcxx.assert0.optlev3.dbgsym0.gasnet_seq.smp/include/upcxx/future/core.hpp: In member function ‘leave_active’:
/home/pagoda1/akamil/upcxx/src/future/core.cpp:20:15: note: declared here
   20 | future_header future_header_result<>::the_always = {
      |               ^
In function ‘operator delete’,
    inlined from ‘drop_for_proxied’ at /home/pagoda1/akamil/upcxx/bld/upcxx.assert0.optlev3.dbgsym0.gasnet_seq.smp/include/upcxx/future/core.hpp:862:55,
    inlined from ‘__ct_base ’ at /home/pagoda1/akamil/upcxx/bld/upcxx.assert0.optlev3.dbgsym0.gasnet_seq.smp/include/upcxx/future/impl_shref.hpp:166:52,
    inlined from ‘__ct ’ at /home/pagoda1/akamil/upcxx/bld/upcxx.assert0.optlev3.dbgsym0.gasnet_seq.smp/include/upcxx/future/impl_shref.hpp:217:65,
    inlined from ‘__ct ’ at /home/pagoda1/akamil/upcxx/bld/upcxx.assert0.optlev3.dbgsym0.gasnet_seq.smp/include/upcxx/future/impl_shref.hpp:226:9,
    inlined from ‘__ct ’ at /home/pagoda1/akamil/upcxx/bld/upcxx.assert0.optlev3.dbgsym0.gasnet_seq.smp/include/upcxx/future/then.hpp:63:9,
    inlined from ‘make_header’ at /home/pagoda1/akamil/upcxx/bld/upcxx.assert0.optlev3.dbgsym0.gasnet_seq.smp/include/upcxx/future/then.hpp:87:11,
    inlined from ‘operator()’ at /home/pagoda1/akamil/upcxx/bld/upcxx.assert0.optlev3.dbgsym0.gasnet_seq.smp/include/upcxx/future/then.hpp:149:87,
    inlined from ‘then’ at /home/pagoda1/akamil/upcxx/bld/upcxx.assert0.optlev3.dbgsym0.gasnet_seq.smp/include/upcxx/future/future1.hpp:279:7,
    inlined from ‘operator()’ at bench/nebr_exchange.cpp:194:12,
    inlined from ‘operator()’ at /home/pagoda1/akamil/upcxx/bld/upcxx.assert0.optlev3.dbgsym0.gasnet_seq.smp/include/upcxx/bind.hpp:229:62,
    inlined from ‘operator()’ at /home/pagoda1/akamil/upcxx/bld/upcxx.assert0.optlev3.dbgsym0.gasnet_seq.smp/include/upcxx/future/apply.hpp:121:85,
    inlined from ‘operator()’ at /home/pagoda1/akamil/upcxx/bld/upcxx.assert0.optlev3.dbgsym0.gasnet_seq.smp/include/upcxx/future/apply.hpp:211:126,
    inlined from ‘leave_active’ at /home/pagoda1/akamil/upcxx/bld/upcxx.assert0.optlev3.dbgsym0.gasnet_seq.smp/include/upcxx/future/then.hpp:68:14:
/home/pagoda1/akamil/upcxx/bld/upcxx.assert0.optlev3.dbgsym0.gasnet_seq.smp/include/upcxx/future/core.hpp:46:7: warning: ‘operator delete’ called on unallocated object ‘the_always’ [-Wfree-nonheap-object]
   46 |       UPCXX_OPNEW_AS_STD
      |       ^
/home/pagoda1/akamil/upcxx/bld/upcxx.assert0.optlev3.dbgsym0.gasnet_seq.smp/include/upcxx/future/core.hpp: In member function ‘leave_active’:
/home/pagoda1/akamil/upcxx/src/future/core.cpp:20:15: note: declared here
   20 | future_header future_header_result<>::the_always = {
      |               ^
In function ‘operator delete’,
    inlined from ‘drop_for_proxied’ at /home/pagoda1/akamil/upcxx/bld/upcxx.assert0.optlev3.dbgsym0.gasnet_seq.smp/include/upcxx/future/core.hpp:862:55,
    inlined from ‘__ct_base ’ at /home/pagoda1/akamil/upcxx/bld/upcxx.assert0.optlev3.dbgsym0.gasnet_seq.smp/include/upcxx/future/impl_shref.hpp:166:52,
    inlined from ‘__ct ’ at /home/pagoda1/akamil/upcxx/bld/upcxx.assert0.optlev3.dbgsym0.gasnet_seq.smp/include/upcxx/future/impl_shref.hpp:217:65,
    inlined from ‘__ct ’ at /home/pagoda1/akamil/upcxx/bld/upcxx.assert0.optlev3.dbgsym0.gasnet_seq.smp/include/upcxx/future/impl_shref.hpp:226:9,
    inlined from ‘__ct ’ at /home/pagoda1/akamil/upcxx/bld/upcxx.assert0.optlev3.dbgsym0.gasnet_seq.smp/include/upcxx/future/then.hpp:63:9,
    inlined from ‘make_header’ at /home/pagoda1/akamil/upcxx/bld/upcxx.assert0.optlev3.dbgsym0.gasnet_seq.smp/include/upcxx/future/then.hpp:87:11,
    inlined from ‘operator()’ at /home/pagoda1/akamil/upcxx/bld/upcxx.assert0.optlev3.dbgsym0.gasnet_seq.smp/include/upcxx/future/then.hpp:149:87,
    inlined from ‘then’ at /home/pagoda1/akamil/upcxx/bld/upcxx.assert0.optlev3.dbgsym0.gasnet_seq.smp/include/upcxx/future/future1.hpp:279:7,
    inlined from ‘operator()’ at bench/nebr_exchange.cpp:194:12,
    inlined from ‘operator()’ at /home/pagoda1/akamil/upcxx/bld/upcxx.assert0.optlev3.dbgsym0.gasnet_seq.smp/include/upcxx/bind.hpp:229:62,
    inlined from ‘operator()’ at /home/pagoda1/akamil/upcxx/bld/upcxx.assert0.optlev3.dbgsym0.gasnet_seq.smp/include/upcxx/future/apply.hpp:132:64,
    inlined from ‘operator()’ at /home/pagoda1/akamil/upcxx/bld/upcxx.assert0.optlev3.dbgsym0.gasnet_seq.smp/include/upcxx/future/impl_then_lazy.hpp:264:9,
    inlined from ‘operator()’ at /home/pagoda1/akamil/upcxx/bld/upcxx.assert0.optlev3.dbgsym0.gasnet_seq.smp/include/upcxx/future/apply.hpp:121:85,
    inlined from ‘operator()’ at /home/pagoda1/akamil/upcxx/bld/upcxx.assert0.optlev3.dbgsym0.gasnet_seq.smp/include/upcxx/future/apply.hpp:211:126,
    inlined from ‘leave_active’ at /home/pagoda1/akamil/upcxx/bld/upcxx.assert0.optlev3.dbgsym0.gasnet_seq.smp/include/upcxx/future/then.hpp:68:14:
/home/pagoda1/akamil/upcxx/bld/upcxx.assert0.optlev3.dbgsym0.gasnet_seq.smp/include/upcxx/future/core.hpp:46:7: warning: ‘operator delete’ called on unallocated object ‘the_always’ [-Wfree-nonheap-object]
   46 |       UPCXX_OPNEW_AS_STD
      |       ^
/home/pagoda1/akamil/upcxx/bld/upcxx.assert0.optlev3.dbgsym0.gasnet_seq.smp/include/upcxx/future/core.hpp: In member function ‘leave_active’:
/home/pagoda1/akamil/upcxx/src/future/core.cpp:20:15: note: declared here
   20 | future_header future_header_result<>::the_always = {
      |               ^

Using the same pattern as for the_nil (issue 181) should hopefully fix this.

Comments (3)

  1. Log in to comment