Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

WIP: future #282

Draft
wants to merge 9 commits into
base: main
Choose a base branch
from
Draft

WIP: future #282

wants to merge 9 commits into from

Conversation

frenchy64
Copy link
Contributor

@frenchy64 frenchy64 commented Feb 20, 2025

Test file: compiler+runtime/test/bash/future/src/jank_test/future.jank

(ns jank-test.future)

(defn -main []
  (dotimes [_ 100000]
    (let [atm (atom [])
          ; on macos, removing gensym gives: Exception: invalid object type: unknown raw value 72
          ; with gensym, gives:
          ; - zsh: segmentation fault 
          ; - zsh: bus error
          a (future (swap! atm conj (gensym "a")))
          ;; b fires twice! a not at all.
          b (future (swap! atm conj (gensym "b")))]
      @a
      @b
      (prn @atm "DONE"))))

On macOS I get all sorts of weird behaviors and errors. "b" conj's twice most of the time if I remove the gensyms.

...
["a" "b"] "DONE"
["b" "b"] "DONE"
["b" "b"] "DONE"
["b" "b"] "DONE"
["b" "b"] "DONE"
["b" "b"] "DONE"
["b" "b"] "DONE"
["b" "b"] "DONE"
["b" "b"] "DONE"
["b" "b"] "DONE"
["b" "b"] "DONE"
["b" "b"] "DONE"
["b" "b"] "DONE"
["b" "b"] "DONE"
["b" "b"] "DONE"
Exception: invalid object type: unknown raw value 72

Adding the gensyms:

~/Pr/jank-local-dev/future/compiler+runtime/test/bash/future future ❯ jank --module-path src run-main jank-test.future
Bottom of clojure.core
[clojure_core-b-4386 clojure_core-b-4387] "DONE"
[clojure_core-b-4388 clojure_core-b-4389] "DONE"
zsh: segmentation fault  jank --module-path src run-main jank-test.future
~/Pr/jank-local-dev/future/co/test/bash/future future !1 ❯ jank --module-path src run-main jank-test.future                             ✘ SEGV
Bottom of clojure.core
[clojure_core-b-4386 clojure_core-b-4387] "DONE"
[clojure_core-b-4388 clojure_core-b-4389] "DONE"
[clojure_core-b-4390 clojure_core-b-4391] "DONE"
[clojure_core-b-4392 clojure_core-b-4393] "DONE"
[clojure_core-b-4394 clojure_core-b-4395] "DONE"
[clojure_core-b-4396 clojure_core-b-4397] "DONE"
[clojure_core-b-4398 clojure_core-b-4399] "DONE"
[clojure_core-b-4400 clojure_core-b-4401] "DONE"
[clojure_core-b-4402 clojure_core-b-4403] "DONE"
[clojure_core-b-4404 clojure_core-b-4405] "DONE"
[clojure_core-b-4406 clojure_core-b-4407] "DONE"
zsh: segmentation fault  jank --module-path src run-main jank-test.future
~/Pr/jank-local-dev/future/co/test/bash/future future !1 ❯ jank --module-path src run-main jank-test.future                             ✘ SEGV
Bottom of clojure.core
[clojure_core-b-4387 clojure_core-b-4386] "DONE"
[clojure_core-b-4388 clojure_core-b-4389] "DONE"
[clojure_core-b-4390 clojure_core-b-4391] "DONE"
[clojure_core-b-4392 clojure_core-b-4393] "DONE"
[clojure_core-b-4394 clojure_core-b-4395] "DONE"
zsh: bus error  jank --module-path src run-main jank-test.future
~/Pr/jank-local-dev/future/co/test/bash/future future !1 ❯ jank --module-path src run-main jank-test.future                              ✘ BUS
Bottom of clojure.core
[clojure_core-b-4386 clojure_core-b-4387] "DONE"
[clojure_core-b-4388 clojure_core-b-4389] "DONE"
zsh: bus error  jank --module-path src run-main jank-test.future
~/Pr/jank-local-dev/future/co/test/bash/future future !1 ❯ jank --module-path src run-main jank-test.future                              ✘ BUS
Bottom of clojure.core
[clojure_core-b-4386 clojure_core-b-4387] "DONE"
[clojure_core-b-4388 clojure_core-b-4389] "DONE"
[clojure_core-b-4390 clojure_core-b-4391] "DONE"
[clojure_core-b-4392 clojure_core-b-4393] "DONE"
zsh: segmentation fault  jank --module-path src run-main jank-test.future
~/Pr/jank-local-dev/future/co/test/bash/future future !1 ❯ jank --module-path src run-main jank-test.future                             ✘ SEGV
Bottom of clojure.core
[clojure_core-b-4386 clojure_core-b-4387] "DONE"
[clojure_core-b-4388 clojure_core-b-4389] "DONE"
[clojure_core-b-4390 clojure_core-b-4391] "DONE"
[clojure_core-b-4392 clojure_core-b-4393] "DONE"
[clojure_core-b-4394 clojure_core-b-4395] "DONE"
[clojure_core-b-4396 clojure_core-b-4397] "DONE"
[clojure_core-b-4398 clojure_core-b-4399] "DONE"
[clojure_core-b-4400 clojure_core-b-4401] "DONE"
[clojure_core-b-4402 clojure_core-b-4403] "DONE"
zsh: segmentation fault  jank --module-path src run-main jank-test.future

On Ubuntu, conj's happen in the right order, but unknown types happen often:

~/Projects/jank-local-dev/future/compiler+runtime/test/bash/future future ❯ gdb --args jank --module-path src run-main jank-test.future                                                ambrose@UbuntuServer
GNU gdb (Ubuntu 15.1-1ubuntu2) 15.1
Copyright (C) 2024 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<https://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
    <http://www.gnu.org/software/gdb/documentation/>.

For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from jank...
(gdb) catch throw
Catchpoint 1 (throw)
(gdb) run
Starting program: /home/ambrose/Projects/jank-local-dev/future/compiler+runtime/build/jank --module-path src run-main jank-test.future
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
Bottom of clojure.core
[New Thread 0x7fffe74006c0 (LWP 2828)]
[New Thread 0x7fffe6a006c0 (LWP 2829)]
[Thread 0x7fffe74006c0 (LWP 2828) exited]
[clojure_core-a-4386 clojure_core-b-4387] "DONE"
[Thread 0x7fffe6a006c0 (LWP 2829) exited]
[New Thread 0x7fffe6a006c0 (LWP 2830)]
[Thread 0x7fffe6a006c0 (LWP 2830) exited]
[New Thread 0x7fffe74006c0 (LWP 2831)]
[Thread 0x7fffe74006c0 (LWP 2831) exited]
[clojure_core-b-4388 clojure_core-b-4389] "DONE"
[New Thread 0x7fffe74006c0 (LWP 2832)]
[Thread 0x7fffe74006c0 (LWP 2832) exited]
[New Thread 0x7fffe6a006c0 (LWP 2833)]
[clojure_core-a-4390 clojure_core-b-4391] "DONE"
[Thread 0x7fffe6a006c0 (LWP 2833) exited]
[New Thread 0x7fffe6a006c0 (LWP 2834)]
[Thread 0x7fffe6a006c0 (LWP 2834) exited]
[New Thread 0x7fffe74006c0 (LWP 2835)]
[Thread 0x7fffe74006c0 (LWP 2835) exited]
[clojure_core-a-4392 clojure_core-b-4393] "DONE"
[New Thread 0x7fffe74006c0 (LWP 2836)]
[Thread 0x7fffe74006c0 (LWP 2836) exited]
[New Thread 0x7fffe6a006c0 (LWP 2837)]
[Thread 0x7fffe6a006c0 (LWP 2837) exited]
[clojure_core-a-4394 clojure_core-b-4395] "DONE"
[New Thread 0x7fffe6a006c0 (LWP 2838)]
[Thread 0x7fffe6a006c0 (LWP 2838) exited]
[New Thread 0x7fffe74006c0 (LWP 2839)]
[Thread 0x7fffe74006c0 (LWP 2839) exited]
[clojure_core-a-4396 clojure_core-b-4397] "DONE"
[New Thread 0x7fffe74006c0 (LWP 2840)]
[Thread 0x7fffe74006c0 (LWP 2840) exited]
[New Thread 0x7fffe6a006c0 (LWP 2841)]
[clojure_core-a-4398 clojure_core-b-4399] "DONE"
[Thread 0x7fffe6a006c0 (LWP 2841) exited]
[New Thread 0x7fffe6a006c0 (LWP 2842)]
[Thread 0x7fffe6a006c0 (LWP 2842) exited]
[New Thread 0x7fffe74006c0 (LWP 2843)]
[Thread 0x7fffe74006c0 (LWP 2843) exited]
[clojure_core-a-4400 clojure_core-b-4401] "DONE"
[New Thread 0x7fffe74006c0 (LWP 2844)]
[Thread 0x7fffe74006c0 (LWP 2844) exited]
[New Thread 0x7fffe6a006c0 (LWP 2845)]
[clojure_core-a-4402 clojure_core-b-4403] "DONE"
[Thread 0x7fffe6a006c0 (LWP 2845) exited]
[New Thread 0x7fffe6a006c0 (LWP 2846)]
[Thread 0x7fffe6a006c0 (LWP 2846) exited]
[New Thread 0x7fffe74006c0 (LWP 2847)]
[Thread 0x7fffe74006c0 (LWP 2847) exited]
[clojure_core-a-4404 clojure_core-b-4405] "DONE"
[New Thread 0x7fffe74006c0 (LWP 2848)]
[Thread 0x7fffe74006c0 (LWP 2848) exited]
[New Thread 0x7fffe6a006c0 (LWP 2849)]
[Switching to Thread 0x7fffe6a006c0 (LWP 2849)]

Thread 23 "jank" hit Catchpoint 1 (exception thrown), 0x00007fffeb4bb35a in __cxa_throw () from /lib/x86_64-linux-gnu/libstdc++.so.6
(gdb) bt
#0  0x00007fffeb4bb35a in __cxa_throw () from /lib/x86_64-linux-gnu/libstdc++.so.6
#1  0x0000555555d0da63 in jank::runtime::visit_object<jank::runtime::dynamic_call(jank::runtime::native_box<jank::runtime::object>)::$_0>(jank::runtime::dynamic_call(jank::runtime::native_box<jank::runtime::object>)::$_0 const&, jank::runtime::object const*) requires visitable<jank::runtime::dynamic_call(jank::runtime::native_box<jank::runtime::object>)::$_0> (fn=..., const_erased=0x7fffffff8cb8)
    at /home/ambrose/Projects/jank-local-dev/future/compiler+runtime/include/cpp/jank/runtime/visit.hpp:374
#2  0x0000555555d0ad4c in jank::runtime::dynamic_call (source=...) at /home/ambrose/Projects/jank-local-dev/future/compiler+runtime/src/cpp/jank/runtime/behavior/callable.cpp:21
#3  0x0000555555d05e53 in jank::runtime::obj::future::future(jank::runtime::native_box<jank::runtime::object>)::$_0::operator()() const (this=0x7ffff33b35e8)
    at /home/ambrose/Projects/jank-local-dev/future/compiler+runtime/src/cpp/jank/runtime/obj/future.cpp:12
#4  0x0000555555d05e15 in std::__invoke_impl<jank::runtime::native_box<jank::runtime::object>, jank::runtime::obj::future::future(jank::runtime::native_box<jank::runtime::object>)::$_0>(std::__invoke_other, jank::runtime::obj::future::future(jank::runtime::native_box<jank::runtime::object>)::$_0&&) (__f=...) at /usr/include/c++/14/bits/invoke.h:61
#5  0x0000555555d05dc5 in std::__invoke<jank::runtime::obj::future::future(jank::runtime::native_box<jank::runtime::object>)::$_0>(jank::runtime::obj::future::future(jank::runtime::native_box<jank::runtime::object>)::$_0&&) (__fn=...) at /usr/include/c++/14/bits/invoke.h:96
#6  0x0000555555d05d9d in std::thread::_Invoker<std::tuple<jank::runtime::obj::future::future(jank::runtime::native_box<jank::runtime::object>)::$_0> >::_M_invoke<0ul> (this=0x7ffff33b35e8)
    at /usr/include/c++/14/bits/std_thread.h:301
#7  0x0000555555d05d65 in std::thread::_Invoker<std::tuple<jank::runtime::obj::future::future(jank::runtime::native_box<jank::runtime::object>)::$_0> >::operator() (this=0x7ffff33b35e8)
    at /usr/include/c++/14/bits/std_thread.h:308
#8  0x0000555555d05c7f in std::__future_base::_Task_setter<std::unique_ptr<std::__future_base::_Result<jank::runtime::native_box<jank::runtime::object> >, std::__future_base::_Result_base::_Deleter>, std::thread::_Invoker<std::tuple<jank::runtime::obj::future::future(jank::runtime::native_box<jank::runtime::object>)::$_0> >, jank::runtime::native_box<jank::runtime::object> >::operator() (
    this=0x7fffe69ffcd8) at /usr/include/c++/14/future:1416
#9  0x0000555555d05c30 in std::__invoke_impl<std::unique_ptr<std::__future_base::_Result<jank::runtime::native_box<jank::runtime::object> >, std::__future_base::_Result_base::_Deleter>, std::__future_base::_Task_setter<std::unique_ptr<std::__future_base::_Result<jank::runtime::native_box<jank::runtime::object> >, std::__future_base::_Result_base::_Deleter>, std::thread::_Invoker<std::tuple<jank::runtime::obj::future::future(jank::runtime::native_box<jank::runtime::object>)::$_0> >, jank::runtime::native_box<jank::runtime::object> >&> (__f=...) at /usr/include/c++/14/bits/invoke.h:61
#10 0x0000555555d05bb8 in std::__invoke_r<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter>, std::__future_base::_Task_setter<std::unique_ptr<std::__future_base::_Result<jank::runtime::native_box<jank::runtime::object> >, std::__future_base::_Result_base::_Deleter>, std::thread::_Invoker<std::tuple<jank::runtime::obj::future::future(jank::runtime::native_box<jank::runtime::object>)::$_0> >, jank::runtime::native_box<jank::runtime::object> >&> (__fn=...) at /usr/include/c++/14/bits/invoke.h:114
#11 0x0000555555d05ae0 in std::_Function_handler<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter>(), std::__future_base::_Task_setter<std::unique_ptr<std::__future_base::_Result<jank::runtime::native_box<jank::runtime::object> >, std::__future_base::_Result_base::_Deleter>, std::thread::_Invoker<std::tuple<jank::runtime::obj::future::future(jank::runtime::native_box<jank::runtime::object>)::$_0> >, jank::runtime::native_box<jank::runtime::object> > >::_M_invoke (__functor=...) at /usr/include/c++/14/bits/std_function.h:290
#12 0x0000555555d082a1 in std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter>()>::operator() (this=0x7fffe69ffcd8)
    at /usr/include/c++/14/bits/std_function.h:591
#13 0x0000555555d08039 in std::__future_base::_State_baseV2::_M_do_set (this=0x7ffff33b35b0, __f=0x7fffe69ffcd8, __did_set=0x7fffe69ffc2e) at /usr/include/c++/14/future:596
#14 0x0000555555d08258 in std::__invoke_impl<void, void (std::__future_base::_State_baseV2::*)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter>()>*, bool*), std::__future_base::_State_baseV2*, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter>()>*, bool*> (
    __f=@0x7fffe69ffc18: (void (std::__future_base::_State_baseV2::*)(std::__future_base::_State_baseV2 * const, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter>()> *, bool *)) 0x555555d08010 <std::__future_base::_State_baseV2::_M_do_set(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*)>, __t=@0x7fffe69ffc10: 0x7ffff33b35b0, __args=@0x7fffe69ffc00: 0x7fffe69ffc2e, __args=@0x7fffe69ffc00: 0x7fffe69ffc2e) at /usr/include/c++/14/bits/invoke.h:74
#15 0x0000555555d081cd in std::__invoke<void (std::__future_base::_State_baseV2::*)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter>()>*, bool*), std::__future_base::_State_baseV2*, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter>()>*, bool*> (
    __fn=@0x7fffe69ffc18: (void (std::__future_base::_State_baseV2::*)(std::__future_base::_State_baseV2 * const, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter>()> *, bool *)) 0x555555d08010 <std::__future_base::_State_baseV2::_M_do_set(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*)>, __args=@0x7fffe69ffc00: 0x7fffe69ffc2e, __args=@0x7fffe69ffc00: 0x7fffe69ffc2e, __args=@0x7fffe69ffc00: 0x7fffe69ffc2e) at /usr/include/c++/14/bits/invoke.h:96
#16 0x0000555555d08194 in std::call_once<void (std::__future_base::_State_baseV2::*)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*), std::__future_base::_State_baseV2*, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*>(std::once_flag&, void (std::__future_base::_State_baseV2::*&&)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*), std::__future_base::_State_baseV2*&&, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*&&, bool*&&)::{lambda()#1}::operator()() const (this=0x7fffe69ffb88) at /usr/include/c++/14/mutex:909
#17 0x0000555555d08164 in std::once_flag::_Prepare_execution::_Prepare_execution<std::call_once<void (std::__future_base::_State_baseV2::*)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*), std::__future_base::_State_baseV2*, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*>(std::once_flag&, void (std::__future_base::_State_baseV2::*&&)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*), std::__f--Type <RET> for more, q to quit, c to continue without paging--
uture_base::_State_baseV2*&&, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*&&, bool*&&)::{lambda()#1}>(void (std::__future_base::_State_baseV2::*&)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*))::{lambda()#1}::operator()() const (this=0x7fffe69ffaaf)
    at /usr/include/c++/14/mutex:845
#18 0x0000555555d08131 in std::once_flag::_Prepare_execution::_Prepare_execution<std::call_once<void (std::__future_base::_State_baseV2::*)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*), std::__future_base::_State_baseV2*, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*>(std::once_flag&, void (std::__future_base::_State_baseV2::*&&)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*), std::__future_base::_State_baseV2*&&, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*&&, bool*&&)::{lambda()#1}>(void (std::__future_base::_State_baseV2::*&)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*))::{lambda()#1}::__invoke() () at /usr/include/c++/14/mutex:845
#19 0x00007fffeb0a73cb in __pthread_once_slow (once_control=0x7ffff33b35c8, init_routine=0x7fffeb4eb420 <__once_proxy>) at ./nptl/pthread_once.c:116
#20 0x00007fffeb0a7439 in ___pthread_once (once_control=<optimized out>, init_routine=<optimized out>) at ./nptl/pthread_once.c:143
#21 0x0000555555d05a47 in __gthread_once (__once=0x7ffff33b35c8, __func=0x7fffeb4eb420 <__once_proxy>) at /usr/include/x86_64-linux-gnu/c++/14/bits/gthr-default.h:713
#22 0x0000555555d07fb9 in std::call_once<void (std::__future_base::_State_baseV2::*)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter>()>*, bool*), std::__future_base::_State_baseV2*, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter>()>*, bool*> (__once=...,
    __f=@0x7fffe69ffc18: (void (std::__future_base::_State_baseV2::*)(std::__future_base::_State_baseV2 * const, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter>()> *, bool *)) 0x555555d08010 <std::__future_base::_State_baseV2::_M_do_set(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*)>, __args=@0x7fffe69ffc00: 0x7fffe69ffc2e, __args=@0x7fffe69ffc00: 0x7fffe69ffc2e, __args=@0x7fffe69ffc00: 0x7fffe69ffc2e) at /usr/include/c++/14/mutex:916
#23 0x0000555555d07c35 in std::__future_base::_State_baseV2::_M_set_result (this=0x7ffff33b35b0, __res=..., __ignore_failure=false) at /usr/include/c++/14/future:435
#24 0x0000555555d056c1 in std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<jank::runtime::obj::future::future(jank::runtime::native_box<jank::runtime::object>)::$_0> >, jank::runtime::native_box<jank::runtime::object> >::_M_run (this=0x7ffff33b35b0) at /usr/include/c++/14/future:1781
#25 0x0000555555d06392 in std::__invoke_impl<void, void (std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<jank::runtime::obj::future::future(jank::runtime::native_box<jank::runtime::object>)::$_0> >, jank::runtime::native_box<jank::runtime::object> >::*)(), std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<jank::runtime::obj::future::future(jank::runtime::native_box<jank::runtime::object>)::$_0> >, jank::runtime::native_box<jank::runtime::object> >*> (
    __f=@0x7fffeb6d60b0: (void (std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<(lambda at /home/ambrose/Projects/jank-local-dev/future/compiler+runtime/src/cpp/jank/runtime/obj/future.cpp:12:48)> >, jank::runtime::native_box<jank::runtime::object> >::*)(std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<(lambda at /home/ambrose/Projects/jank-local-dev/future/compiler+runtime/src/cpp/jank/runtime/obj/future.cpp:12:48)> >, jank::runtime::native_box<jank::runtime::object> > * const)) 0x555555d05660 <std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<jank::runtime::obj::future::future(jank::runtime::native_box<jank::runtime::object>)::$_0> >, jank::runtime::native_box<jank::runtime::object> >::_M_run()>, __t=@0x7fffeb6d60a8: 0x7ffff33b35b0)
    at /usr/include/c++/14/bits/invoke.h:74
#26 0x0000555555d062dd in std::__invoke<void (std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<jank::runtime::obj::future::future(jank::runtime::native_box<jank::runtime::object>)::$_0> >, jank::runtime::native_box<jank::runtime::object> >::*)(), std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<jank::runtime::obj::future::future(jank::runtime::native_box<jank::runtime::object>)::$_0> >, jank::runtime::native_box<jank::runtime::object> >*> (
    __fn=@0x7fffeb6d60b0: (void (std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<(lambda at /home/ambrose/Projects/jank-local-dev/future/compiler+runtime/src/cpp/jank/runtime/obj/future.cpp:12:48)> >, jank::runtime::native_box<jank::runtime::object> >::*)(std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<(lambda at /home/ambrose/Projects/jank-local-dev/future/compiler+runtime/src/cpp/jank/runtime/obj/future.cpp:12:48)> >, jank::runtime::native_box<jank::runtime::object> > * const)) 0x555555d05660 <std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<jank::runtime::obj::future::future(jank::runtime::native_box<jank::runtime::object>)::$_0> >, jank::runtime::native_box<jank::runtime::object> >::_M_run()>, __args=@0x7fffeb6d60a8: 0x7ffff33b35b0)
    at /usr/include/c++/14/bits/invoke.h:96
#27 0x0000555555d062b2 in std::thread::_Invoker<std::tuple<void (std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<jank::runtime::obj::future::future(jank::runtime::native_box<jank::runtime::object>)::$_0> >, jank::runtime::native_box<jank::runtime::object> >::*)(), std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<jank::runtime::obj::future::future(jank::runtime::native_box<jank::runtime::object>)::$_0> >, jank::runtime::native_box<jank::runtime::object> >*> >::_M_invoke<0ul, 1ul> (this=0x7fffeb6d60a8) at /usr/include/c++/14/bits/std_thread.h:301
#28 0x0000555555d06275 in std::thread::_Invoker<std::tuple<void (std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<jank::runtime::obj::future::future(jank::runtime::native_box<jank::runtime::object>)::$_0> >, jank::runtime::native_box<jank::runtime::object> >::*)(), std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<jank::runtime::obj::future::future(jank::runtime::native_box<jank::runtime::object>)::$_0> >, jank::runtime::native_box<jank::runtime::object> >*> >::operator() (this=0x7fffeb6d60a8) at /usr/include/c++/14/bits/std_thread.h:308
#29 0x0000555555d06159 in std::thread::_State_impl<std::thread::_Invoker<std::tuple<void (std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<jank::runtime::obj::future::future(jank::runtime::native_box<jank::runtime::object>)::$_0> >, jank::runtime::native_box<jank::runtime::object> >::*)(), std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<jank::runtime::obj::future::future(jank::runtime::native_box<jank::runtime::object>)::$_0> >, jank::runtime::native_box<jank::runtime::object> >*> > >::_M_run (this=0x7fffeb6d60a0) at /usr/include/c++/14/bits/std_thread.h:253
#30 0x00007fffeb4ecdb4 in ?? () from /lib/x86_64-linux-gnu/libstdc++.so.6
#31 0x00007fffeb0a1e2e in start_thread (arg=<optimized out>) at ./nptl/pthread_create.c:447
#32 0x00007fffeb133a4c in __GI___clone3 () at ../sysdeps/unix/sysv/linux/x86_64/clone3.S:78
(gdb)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant