tokiwa-software / fuzion

The Fuzion Language Implementation
https://fuzion-lang.dev
GNU General Public License v3.0
46 stars 11 forks source link

VerifyError: Bad type on operand stack #3778

Open maxteufel opened 1 week ago

maxteufel commented 1 week ago

When making a small change in the fuzion-based flang.dev webserver:

error 1: java.lang.VerifyError: Bad type on operand stack
Exception Details:
  Location:
    fzC_fuzion__java__3get_field_Java_java_lang___jString.fzRoutine(LfzI_fuzion__java__1Java_Object;LfzI_String;LfzI_String;)LfzC_Java__java__lang__1_u_jString; @42: getfield
  Reason:
    Type 'fzI_fuzion__java__1Java_Object' (current frame, stack[1]) is not assignable to 'fzC_fuzion__java__1Java_Object'
  Current Frame:
    bci: @42
    flags: { }
    locals: { 'fzI_fuzion__java__1Java_Object', 'fzI_String', 'fzI_String', 'fzC_fuzion__java__3get_field_Java_java_lang___jString' }
    stack: { 'fzC_fuzion__java__3get_field_Java_java_lang___jString', 'fzI_fuzion__java__1Java_Object' }
  Bytecode:
    0000000: bb00 0259 b700 164e 2d2a b500 182d 2bb5
    0000010: 001a 2d2c b500 1c2d 2db4 001a b800 22b5
    0000020: 0024 b800 282d 2db4 0018 b400 2e2d b400
    0000030: 24b4 002e c000 30b8 0036 b500 382d b400
    0000040: 38b0                                   
  Stackmap Table:
    full_frame(@0,{Object[#59],Object[#61],Object[#61]},{})

    at fzC_Java__dev__flang__1Content_S_Identifier___u_simplePath.fzRoutine($MODULE/Java/dev/flang/Content_S_Identifier.fz:31)
    at fzC_5get_response_main.fzRoutine(src/get_response.fz:111)
    at fzC__L75249_connection__ess_INTERN_fun333_call_lm__1get_response.fzRoutine(src/connection_handler.fz:109)
    at fzC__L75253_connection__ool_submit_success_INTERN_fun333_call_lm.fzRoutine(src/connection_handler.fz:115)
    at fzC__L75858_connection__NTERN_fun333_call_lm__INTERN_fun21__call.fzRoutine(src/connection_handler.fz:86)
    at fzC__L70499_panic_INTE____INTERN_fun9__call__INTERN_fun119__call.fzRoutine($MODULE/eff/fallible.fz:84)
    at fzC_panic_INTERN_type_panic__3instate_unit__INTERN_fun2__call.fzRoutine($MODULE/effect.fz:119)
    at fzC_2panic__1Effect_Call_unit__call.fzRoutine($MODULE/effect.fz:210)
    at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
    at java.base/java.lang.reflect.Method.invoke(Method.java:580)
    at dev.flang.be.jvm.runtime.Runtime.effect_instate(Runtime.java:633)
    at fzC_panic_INTERN_type_panic__3instate_unit.fzRoutine($MODULE/effect.fz:119)
    at fzC__L70448_panic_INTE__ic__1try_unit__1catch__INTERN_fun9__call.fzRoutine($MODULE/eff/fallible.fz:84)
    at fzC_eff__lm__1instate_self_unit__INTERN_fun95__call.fzRoutine($MODULE/effect.fz:164)
    at fzC__L67652_eff_INTERN__ff_lm__2instate_unit__INTERN_fun98__call.fzRoutine($MODULE/effect.fz:143)
    at fzC__L68261_eff_INTERN__eff_lm__3instate_unit__INTERN_fun2__call.fzRoutine($MODULE/effect.fz:119)
    at fzC_eff__lm__1Effect_Call_unit__call.fzRoutine($MODULE/effect.fz:210)
    at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
    at java.base/java.lang.reflect.Method.invoke(Method.java:580)
    at dev.flang.be.jvm.runtime.Runtime.effect_instate(Runtime.java:633)
    at fzC_eff_INTERN_type_eff__lm_INTERN_type_eff_lm__3instate_unit.fzRoutine($MODULE/effect.fz:119)
    at fzC_eff_INTERN_type_eff__lm_INTERN_type_eff_lm__2instate_unit.fzRoutine($MODULE/effect.fz:143)
    at fzC_eff__lm__1instate_self_unit.fzRoutine($MODULE/effect.fz:164)
    at fzC_panic_INTERN_type_panic__1try_unit__1catch.fzRoutine($MODULE/eff/fallible.fz:79)
    at fzC__L75237_connection__ool_submit_success_INTERN_fun333_call_lm.fzRoutine(src/connection_handler.fz:87)
    at fzC__L58270_net__5serv__INTERN_fun336__call__INTERN_fun337__call.fzRoutine($MODULE/net/server.fz:113)
    at fzC_net__1channel__1instate_self_unit__INTERN_fun95__call.fzRoutine($MODULE/effect.fz:164)
    at fzC__L67655_net_INTERN__annel__2instate_unit__INTERN_fun98__call.fzRoutine($MODULE/effect.fz:143)
    at fzC__L68266_net_INTERN__hannel__3instate_unit__INTERN_fun2__call.fzRoutine($MODULE/effect.fz:119)
    at fzC_net__1channel__1Effect_Call_unit__call.fzRoutine($MODULE/effect.fz:210)
    at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
    at java.base/java.lang.reflect.Method.invoke(Method.java:580)
    at dev.flang.be.jvm.runtime.Runtime.effect_instate(Runtime.java:633)
    at fzC__L67894_net_INTERN__l_INTERN_type_net_channel__3instate_unit.fzRoutine($MODULE/effect.fz:119)
    at fzC__L67421_net_INTERN__l_INTERN_type_net_channel__2instate_unit.fzRoutine($MODULE/effect.fz:143)
    at fzC_net__1channel__1instate_self_unit.fzRoutine($MODULE/effect.fz:164)
    at fzC__L58263_net__5serv__INTERN_fun335__call__INTERN_fun336__call.fzRoutine($MODULE/net/server.fz:112)
    at fzC__L51120_io__buffer__INTERN_fun240__call__INTERN_fun363__call.fzRoutine($MODULE/io/buffered/writer.fz:44)
    at fzC__L68265_io_INTERN___all_lm__3instate_unit__INTERN_fun2__call.fzRoutine($MODULE/effect.fz:119)
    at fzC__L47560_io__buffer___fun333_call_lm__1Effect_Call_unit__call.fzRoutine($MODULE/effect.fz:210)
    at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
    at java.base/java.lang.reflect.Method.invoke(Method.java:580)
    at dev.flang.be.jvm.runtime.Runtime.effect_instate(Runtime.java:633)
    at fzC__L67893_io_INTERN___ess_INTERN_fun333_call_lm__3instate_unit.fzRoutine($MODULE/effect.fz:119)
    at fzC__L51113_io__buffer__call_lm__1with_unit__INTERN_fun240__call.fzRoutine($MODULE/io/buffered/writer.fz:44)
    at fzC__L60613_1try___io___fun333_call_lm___unit__INTERN_fun8__call.fzRoutine($MODULE/try.fz:73)
    at fzC__L70608_try_INTERN__3_call_lm__1on_unit__INTERN_fun116__call.fzRoutine($MODULE/try.fz:57)
    at fzC__L70498_try_INTERN____INTERN_fun9__call__INTERN_fun119__call.fzRoutine($MODULE/eff/fallible.fz:84)
    at fzC__L68258_try_INTERN__instate__outcome_unit__INTERN_fun2__call.fzRoutine($MODULE/effect.fz:119)
    at fzC__L47556_3try___io___all_lm__1Effect_Call__outcome_unit__call.fzRoutine($MODULE/effect.fz)
    at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
    at java.base/java.lang.reflect.Method.invoke(Method.java:580)
    at dev.flang.be.jvm.runtime.Runtime.effect_instate(Runtime.java:633)
    at fzC__L67886_try_INTERN__N_fun333_call_lm__3instate__outcome_unit.fzRoutine($MODULE/effect.fz:119)
    at fzC__L70447_try_INTERN___outcome_unit__1catch__INTERN_fun9__call.fzRoutine($MODULE/eff/fallible.fz:84)
    at fzC_eff__lm__1instate_self__outcome_unit__INTERN_fun95__call.fzRoutine($MODULE/effect.fz:164)
    at fzC__L67650_eff_INTERN__nstate__outcome_unit__INTERN_fun98__call.fzRoutine($MODULE/effect.fz:143)
    at fzC__L68257_eff_INTERN__instate__outcome_unit__INTERN_fun2__call.fzRoutine($MODULE/effect.fz:119)
    at fzC_eff__lm__1Effect_Call__outcome_unit__call.fzRoutine($MODULE/effect.fz)
    at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
    at java.base/java.lang.reflect.Method.invoke(Method.java:580)
    at dev.flang.be.jvm.runtime.Runtime.effect_instate(Runtime.java:633)
    at fzC__L67885_eff_INTERN__TERN_type_eff_lm__3instate__outcome_unit.fzRoutine($MODULE/effect.fz:119)
    at fzC__L67416_eff_INTERN__TERN_type_eff_lm__2instate__outcome_unit.fzRoutine($MODULE/effect.fz:143)
    at fzC_eff__lm__1instate_self__outcome_unit.fzRoutine($MODULE/effect.fz:164)
    at fzC__L70423_try_INTERN__n333_call_lm__1try__outcome_unit__1catch.fzRoutine($MODULE/eff/fallible.fz:79)
    at fzC__L70592_try_INTERN___success_INTERN_fun333_call_lm__1on_unit.fzRoutine($MODULE/try.fz:56)
    at fzC__L60599_1try___io___mit_success_INTERN_fun333_call_lm___unit.fzRoutine($MODULE/try.fz:73)
    at fzC__L51105_io__buffer__uccess_INTERN_fun333_call_lm__1with_unit.fzRoutine($MODULE/io/buffered/writer.fz:44)
    at fzC__L58256_net__5serv__INTERN_fun334__call__INTERN_fun335__call.fzRoutine($MODULE/net/server.fz:111)
    at fzC__L50922_io__buffer__INTERN_fun239__call__INTERN_fun361__call.fzRoutine($MODULE/io/buffered/reader.fz:49)
    at fzC__L68260_io_INTERN___instate__outcome_unit__INTERN_fun2__call.fzRoutine($MODULE/effect.fz:119)
    at fzC__L47555_io__buffer__all_lm__1Effect_Call__outcome_unit__call.fzRoutine($MODULE/effect.fz)
    at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
    at java.base/java.lang.reflect.Method.invoke(Method.java:580)
    at dev.flang.be.jvm.runtime.Runtime.effect_instate(Runtime.java:633)
    at fzC__L67888_io_INTERN___N_fun333_call_lm__3instate__outcome_unit.fzRoutine($MODULE/effect.fz:119)
    at fzC__L50915_io__buffer__1with__outcome_unit__INTERN_fun239__call.fzRoutine($MODULE/io/buffered/reader.fz:49)
    at fzC__L60612_1try___io___ll_lm___outcome__unit__INTERN_fun8__call.fzRoutine($MODULE/try.fz:73)
    at fzC__L70607_try_INTERN____1on__outcome_unit__INTERN_fun116__call.fzRoutine($MODULE/try.fz)
    at fzC__L70497_try_INTERN____INTERN_fun9__call__INTERN_fun119__call.fzRoutine($MODULE/eff/fallible.fz:84)
    at fzC__L68255_try_INTERN__outcome__outcome_unit__INTERN_fun2__call.fzRoutine($MODULE/effect.fz:119)
    at fzC__L47552_3try___io___ffect_Call___outcome__outcome_unit__call.fzRoutine($MODULE/effect.fz)
    at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
    at java.base/java.lang.reflect.Method.invoke(Method.java:580)
    at dev.flang.be.jvm.runtime.Runtime.effect_instate(Runtime.java:633)
    at fzC__L67883_try_INTERN__all_lm__3instate___outcome__outcome_unit.fzRoutine($MODULE/effect.fz:119)
    at fzC__L70446_try_INTERN___outcome_unit__1catch__INTERN_fun9__call.fzRoutine($MODULE/eff/fallible.fz:84)
    at fzC__L47286_eff__lm__1__utcome__outcome_unit__INTERN_fun95__call.fzRoutine($MODULE/effect.fz:164)
    at fzC__L67648_eff_INTERN__utcome__outcome_unit__INTERN_fun98__call.fzRoutine($MODULE/effect.fz:143)
    at fzC__L68254_eff_INTERN__outcome__outcome_unit__INTERN_fun2__call.fzRoutine($MODULE/effect.fz:119)
    at fzC_eff__lm__1Effect_Call___outcome__outcome_unit__call.fzRoutine($MODULE/effect.fz)
    at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
    at java.base/java.lang.reflect.Method.invoke(Method.java:580)
    at dev.flang.be.jvm.runtime.Runtime.effect_instate(Runtime.java:633)
    at fzC__L67882_eff_INTERN__eff_lm__3instate___outcome__outcome_unit.fzRoutine($MODULE/effect.fz:119)
    at fzC__L67414_eff_INTERN__eff_lm__2instate___outcome__outcome_unit.fzRoutine($MODULE/effect.fz:143)
    at fzC_eff__lm__1instate_self___outcome__outcome_unit.fzRoutine($MODULE/effect.fz:164)
    at fzC__L70422_try_INTERN__lm__1try___outcome__outcome_unit__1catch.fzRoutine($MODULE/eff/fallible.fz:79)
    at fzC__L70591_try_INTERN__INTERN_fun333_call_lm__1on__outcome_unit.fzRoutine($MODULE/try.fz:56)
    at fzC__L60598_1try___io___ss_INTERN_fun333_call_lm___outcome__unit.fzRoutine($MODULE/try.fz:73)
    at fzC__L50907_io__buffer__TERN_fun333_call_lm__1with__outcome_unit.fzRoutine($MODULE/io/buffered/reader.fz:49)
    at fzC__L58249_net__5serv__INTERN_fun333__call__INTERN_fun334__call.fzRoutine($MODULE/net/server.fz:110)
    at fzC__L47287_net__5serv__utcome__outcome_unit__INTERN_fun95__call.fzRoutine($MODULE/effect.fz:164)
    at fzC__L67649_net_INTERN__utcome__outcome_unit__INTERN_fun98__call.fzRoutine($MODULE/effect.fz:143)
    at fzC__L68256_net_INTERN__outcome__outcome_unit__INTERN_fun2__call.fzRoutine($MODULE/effect.fz:119)
    at fzC__L47551_net__5serv__ffect_Call___outcome__outcome_unit__call.fzRoutine($MODULE/effect.fz)
    at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
    at java.base/java.lang.reflect.Method.invoke(Method.java:580)
    at dev.flang.be.jvm.runtime.Runtime.effect_instate(Runtime.java:633)
    at fzC__L67884_net_INTERN__all_lm__3instate___outcome__outcome_unit.fzRoutine($MODULE/effect.fz:119)
    at fzC__L67415_net_INTERN__all_lm__2instate___outcome__outcome_unit.fzRoutine($MODULE/effect.fz:143)
    at fzC__L47079_net__5serv__m__1instate_self___outcome__outcome_unit.fzRoutine($MODULE/effect.fz:164)
    at fzC__L58238_net__5serv__ool__submit_success__INTERN_fun333__call.fzRoutine($MODULE/net/server.fz:109)
    at fzC__L46186_concur__4t__all__INTERN_fun211__call__1INTERN_loop39.fzRoutine($MODULE/concur/thread_pool.fz:109)
    at fzC__L46182_concur__4t__INTERN_fun36__1call__INTERN_fun211__call.fzRoutine($MODULE/concur/thread_pool.fz:107)
    at fzC_concur__1thread__1spawn__INTERN_fun210__call.fzRoutine($MODULE/concur/thread.fz:51)
    at fzC_fuzion__sys__thread__1spawn__Do_Call__call.fzRoutine($MODULE/fuzion/sys/thread.fz:36)
    at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
    at java.base/java.lang.reflect.Method.invoke(Method.java:580)
    at dev.flang.be.jvm.runtime.FuzionThread.lambda$new$0(FuzionThread.java:84)
    at dev.flang.util.Errors.runAndExit(Errors.java:895)
    at dev.flang.be.jvm.runtime.FuzionThread.lambda$new$2(FuzionThread.java:116)
    at java.base/java.lang.Thread.run(Thread.java:1583)

the relevant parts of the change:

diff --git a/src/get_response.fz b/src/get_response.fz
index d932c855..61ab107d 100644
--- a/src/get_response.fz
+++ b/src/get_response.fz
@@ -103,7 +103,13 @@ module get_response_main (raw_path, cmd String, client Java.java.net.InetAddress
       # NYI
       jflang.webserver_S_Response_static.new 500 "" (list i8).type.empty
     else if raw_path = "/goto"
-      # NYI
+      match form_data["page"]
+        nil => say "error: empty page requested"
+        page String =>
+          if !s.is_null
+            c := jflang.Content_static.getContents s page
+            s.setCurrent c.__simplePath
+            s.sendContent
       send_ok_or_reload cmd s
     else if raw_path = "/run"
       # NYI
maxteufel commented 3 days ago

more minimal example:

$ cat ex_verifyerror.fz 
ex_verifyerror =>
  addr array i8 := [0, 0, 0, 0]
  client Java.java.net.InetAddress := (Java.java.net.InetAddress_static.getByAddress addr).val
  s := Java.dev.flang.Session_static.get "" "" client
  c := Java.dev.flang.Content_static.getContents s "/news"
  s.setCurrent c.__simplePath

$ FUZION_JAVA_ADDITIONAL_CLASSPATH="classes" fz -unsafeIntrinsics=on -modules=java.base,webserver ex_verifyerror.fz 
0: new session 1 Y68tliH9Y2wC_COq27_uUQ for /0.0.0.0 user --none--

error 1: java.lang.VerifyError: Bad type on operand stack
Exception Details:
  Location:
    fzC_fuzion__java__3get_field_Java_java_lang___jString.fzRoutine(LfzI_fuzion__java__1Java_Object;LfzI_String;LfzI_String;)LfzC_Java__java__lang__1_u_jString; @42: getfield
  Reason:
    Type 'fzI_fuzion__java__1Java_Object' (current frame, stack[1]) is not assignable to 'fzC_fuzion__java__1Java_Object'
  Current Frame:
    bci: @42
    flags: { }
    locals: { 'fzI_fuzion__java__1Java_Object', 'fzI_String', 'fzI_String', 'fzC_fuzion__java__3get_field_Java_java_lang___jString' }
    stack: { 'fzC_fuzion__java__3get_field_Java_java_lang___jString', 'fzI_fuzion__java__1Java_Object' }
  Bytecode:
    0000000: bb00 0259 b700 164e 2d2a b500 182d 2bb5
    0000010: 001a 2d2c b500 1c2d 2db4 001a b800 22b5
    0000020: 0024 b800 282d 2db4 0018 b400 2e2d b400
    0000030: 24b4 002e c000 30b8 0036 b500 382d b400
    0000040: 38b0                                   
  Stackmap Table:
    full_frame(@0,{Object[#59],Object[#61],Object[#61]},{})

    at fzC_Java__dev__flang__1Content_S_Identifier___u_simplePath.fzRoutine($MODULE/Java/dev/flang/Content_S_Identifier.fz:46)
    at fzC_ex_verifyerror.fzRoutine(ex_verifyerror.fz:6)
    at fzC_universe.fz_run(--builtin--)
    at dev.flang.be.jvm.runtime.FuzionThread.lambda$new$1(FuzionThread.java:104)
    at dev.flang.util.Errors.runAndExit(Errors.java:895)
    at dev.flang.be.jvm.runtime.FuzionThread.lambda$new$2(FuzionThread.java:116)
    at java.base/java.lang.Thread.run(Thread.java:1583)

*** fatal errors encountered, stopping.
one error.