hissssst / tria

Elixir optimizing compiler
GNU General Public License v3.0
55 stars 2 forks source link

Not matching clause `{:m_generate, ...` during mix tria.warmup #10

Open mat-hek opened 1 year ago

mat-hek commented 1 year ago

Hello again 👋 trying to compile membrane with tria again and running into some issues. After some tweaking, I managed to compile membrane_core (I'll dig deeper and report issues later on), but I stuck on an error during mix tria.warmup --available:

830/2447 MapSet 8/21** (CaseClauseError) no case clause matching: {:m_generate, {471, 33}, {:map_field_exact, {471, 28}, {:var, {471, 26}, :K}, {:var, {471, 31}, :_}}, {:var, {471, 36}, :D}}
    (tria 0.0.1) lib/tria/compiler/translator/abstract.ex:72: Tria.Compiler.AbstractTranslator.traverse/1
    (elixir 1.15.4) lib/enum.ex:1693: Enum."-map/2-lists^map/1-1-"/2
    (tria 0.0.1) lib/tria/compiler/translator/abstract.ex:75: Tria.Compiler.AbstractTranslator.traverse/1
    (tria 0.0.1) lib/tria/compiler/translator/abstract.ex:115: Tria.Compiler.AbstractTranslator.traverse/1
    (elixir 1.15.4) lib/enum.ex:1693: Enum."-map/2-lists^map/1-1-"/2
    (tria 0.0.1) lib/tria/compiler/translator/abstract.ex:75: Tria.Compiler.AbstractTranslator.traverse/1
    (tria 0.0.1) lib/tria/compiler/translator/abstract.ex:294: Tria.Compiler.AbstractTranslator.traverse/1
    (tria 0.0.1) lib/tria/compiler/translator/abstract.ex:324: Tria.Compiler.AbstractTranslator.traverse/1

To reproduce:

git clone git@github.com:membraneframework/membrane_core.git -b try-tria
cd membrane_core
mix deps.get
mix compile && mix tria.warmup --available

I'd appreciate your help. Also, maybe it would be possible to add a catch and reraise somewhere that would print the original stacktrace/code that was being analyzed/translated when the error happened? Having that, it would be easier for me to debug myself.

Regards, Mateusz

hissssst commented 1 year ago

Hi, thanks for a bug report, I'll take a look at this during the weekend

hissssst commented 1 year ago

@mat-hek it appears that Tria fails to analyze MapSet module. What exact versions of Elixir and OTP are you using?

mat-hek commented 1 year ago
$ elixir -v
Erlang/OTP 26 [erts-14.0.2] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:1] [jit:ns]

Elixir 1.15.4 (compiled with Erlang/OTP 24)
mat-hek commented 1 year ago

I also tried on Elixir 1.14.3 / OTP 25 and got this instead:

1020/2444 Record.Extractor 2/13** (CaseClauseError) no case clause matching: {:mc, {58, 13}, {:map_field_assoc, {58, 28}, {:tuple, {58, 15}, [{:var, {58, 16}, :Name}, {:var, {58, 21}, :Arity}]}, {:atom, {58, 31}, :local}}, [{:generate, {58, 66}, {:tuple, {58, 40}, [{:atom, {58, 41}, :function}, {:var, {58, 50}, :_}, {:var, {58, 52}, :Name}, {:var, {58, 57}, :Arity}, {:var, {58, 63}, :_}]}, {:var, {58, 69}, :Forms}}]}
    lib/tria/compiler/translator/abstract.ex:72: Tria.Compiler.AbstractTranslator.traverse/1
    lib/tria/compiler/translator/abstract.ex:122: Tria.Compiler.AbstractTranslator.traverse/1
    (elixir 1.14.3) lib/enum.ex:1658: Enum."-map/2-lists^map/1-0-"/2
    lib/tria/compiler/translator/abstract.ex:75: Tria.Compiler.AbstractTranslator.traverse/1
    lib/tria/compiler/translator/abstract.ex:444: Tria.Compiler.AbstractTranslator.traverse_block/1
    lib/tria/compiler/translator/abstract.ex:316: Tria.Compiler.AbstractTranslator.traverse/1
    (elixir 1.14.3) lib/enum.ex:1658: Enum."-map/2-lists^map/1-0-"/2
    lib/tria/compiler/translator/abstract.ex:75: Tria.Compiler.AbstractTranslator.traverse/1