[erlang-bugs] Core Erlang Binary Literals in Clause Nodes Breaks the Compiler

Eric Merritt <>
Mon Jan 16 17:31:05 CET 2012


Guys,

I believe this is a bug. I hope the included information sufficient
and useful. If
not I can provide some more programmably testable result. A binary
literal in a pattern breaks the 'from_core' compiler.  The erlang to
core compiler does not produce binary literals for patterns, so I
suspect this code has simply never been tested. Binary literals
({c_literal, [],
<<"ok">>} for example) in the pattern part of a c_clause causes the
compiler to error out. Here are two versions of the same AST one of
which works, the other causes the compiler to error.

You can compile both of these with

   compile:forms(AST, [binary, from_core]).

Working AST:

CerlAST = {c_module,
            [1,{file,"/home/emerritt/workspace/joxa/src/test.jxa"}],
            {c_literal,
             [1,{file,"/home/emerritt/workspace/joxa/src/test.jxa"}],
             test},
            [{c_var,[compiler_generated],{module_info,1}},
             {c_var,
              [3,{file,"/home/emerritt/workspace/joxa/src/test.jxa"}],
              {test,1}},
             {c_var,[compiler_generated],{module_info,0}}],
            [],
            [{{c_var,[compiler_generated],{module_info,0}},
              {c_fun,
               [compiler_generated],
               [],
               {c_call,[],
                {c_literal,[],erlang},
                {c_literal,[],get_module_info},
                [{c_literal,[],test}]}}},
             {{c_var,[compiler_generated],{module_info,1}},
              {c_fun,
               [compiler_generated],
               [{c_var,[],mdetail}],
               {c_call,[],
                {c_literal,[],erlang},
                {c_literal,[],get_module_info},
                [{c_literal,[],test},{c_var,[],mdetail}]}}},
             {{c_var,
               [3,{file,"/home/emerritt/workspace/joxa/src/test.jxa"}],
               {test,1}},
              {c_fun,
               [3,{file,"/home/emerritt/workspace/joxa/src/test.jxa"}],
               [{c_var,

[3,{file,"/home/emerritt/workspace/joxa/src/test.jxa"}],
                 el}],
               {c_case,

[4,{file,"/home/emerritt/workspace/joxa/src/test.jxa"}],
                {c_var,

[4,{file,"/home/emerritt/workspace/joxa/src/test.jxa"}],
                 el},
                [{c_clause,

[5,{file,"/home/emerritt/workspace/joxa/src/test.jxa"}],
                  [{c_binary,

[5,{file,"/home/emerritt/workspace/joxa/src/test.jxa"}],
                    [{c_bitstr,

[5,{file,"/home/emerritt/workspace/joxa/src/test.jxa"}],
                      {c_literal,
                       [5,

{file,"/home/emerritt/workspace/joxa/src/test.jxa"}],
                       111},
                      {c_literal,
                       [5,

{file,"/home/emerritt/workspace/joxa/src/test.jxa"}],
                       8},
                      {c_literal,[compiler_generated],1},
                      {c_literal,
                       [5,

{file,"/home/emerritt/workspace/joxa/src/test.jxa"}],
                       integer},
                      {c_literal,
                       [5,

{file,"/home/emerritt/workspace/joxa/src/test.jxa"}],
                       [unsigned,big]}},
                     {c_bitstr,

[5,{file,"/home/emerritt/workspace/joxa/src/test.jxa"}],
                      {c_literal,
                       [5,

{file,"/home/emerritt/workspace/joxa/src/test.jxa"}],
                       107},
                      {c_literal,
                       [5,

{file,"/home/emerritt/workspace/joxa/src/test.jxa"}],
                       8},
                      {c_literal,[compiler_generated],1},
                      {c_literal,
                       [5,

{file,"/home/emerritt/workspace/joxa/src/test.jxa"}],
                       integer},
                      {c_literal,
                       [5,

{file,"/home/emerritt/workspace/joxa/src/test.jxa"}],
                       [unsigned,big]}}]}],
                  {c_literal,

[5,{file,"/home/emerritt/workspace/joxa/src/test.jxa"}],
                   true},
                  {c_binary,

[6,{file,"/home/emerritt/workspace/joxa/src/test.jxa"}],
                   [{c_bitstr,

[6,{file,"/home/emerritt/workspace/joxa/src/test.jxa"}],
                     {c_literal,

[6,{file,"/home/emerritt/workspace/joxa/src/test.jxa"}],
                      34},
                     {c_literal,

[6,{file,"/home/emerritt/workspace/joxa/src/test.jxa"}],
                      8},
                     {c_literal,[compiler_generated],1},
                     {c_literal,

[6,{file,"/home/emerritt/workspace/joxa/src/test.jxa"}],
                      integer},
                     {c_literal,

[6,{file,"/home/emerritt/workspace/joxa/src/test.jxa"}],
                      [unsigned,big]}}]}},
                 {c_clause,

[7,{file,"/home/emerritt/workspace/joxa/src/test.jxa"}],
                  [{c_var,

[7,{file,"/home/emerritt/workspace/joxa/src/test.jxa"}],
                    '_GENSYM_727BDA1'}],
                  {c_literal,

[7,{file,"/home/emerritt/workspace/joxa/src/test.jxa"}],
                   true},
                  {c_literal,

[8,{file,"/home/emerritt/workspace/joxa/src/test.jxa"}],
                   foo}}]}}}]}




Broken AST:

CerlAST = {c_module,
            [1,{file,"/home/emerritt/workspace/joxa/src/test.jxa"}],
            {c_literal,
             [1,{file,"/home/emerritt/workspace/joxa/src/test.jxa"}],
             test},
            [{c_var,[compiler_generated],{module_info,1}},
             {c_var,
              [3,{file,"/home/emerritt/workspace/joxa/src/test.jxa"}],
              {test,1}},
             {c_var,[compiler_generated],{module_info,0}}],
            [],
            [{{c_var,[compiler_generated],{module_info,0}},
              {c_fun,
               [compiler_generated],
               [],
               {c_call,[],
                {c_literal,[],erlang},
                {c_literal,[],get_module_info},
                [{c_literal,[],test}]}}},
             {{c_var,[compiler_generated],{module_info,1}},
              {c_fun,
               [compiler_generated],
               [{c_var,[],mdetail}],
               {c_call,[],
                {c_literal,[],erlang},
                {c_literal,[],get_module_info},
                [{c_literal,[],test},{c_var,[],mdetail}]}}},
             {{c_var,
               [3,{file,"/home/emerritt/workspace/joxa/src/test.jxa"}],
               {test,1}},
              {c_fun,
               [3,{file,"/home/emerritt/workspace/joxa/src/test.jxa"}],
               [{c_var,

[3,{file,"/home/emerritt/workspace/joxa/src/test.jxa"}],
                 el}],
               {c_case,

[4,{file,"/home/emerritt/workspace/joxa/src/test.jxa"}],
                {c_var,

[4,{file,"/home/emerritt/workspace/joxa/src/test.jxa"}],
                 el},
                [{c_clause,

[5,{file,"/home/emerritt/workspace/joxa/src/test.jxa"}],
                  [{c_literal,

[5,{file,"/home/emerritt/workspace/joxa/src/test.jxa"}],
                   <<"ok">>}],
                  {c_literal,

[5,{file,"/home/emerritt/workspace/joxa/src/test.jxa"}],
                   true},
                  {c_binary,

[6,{file,"/home/emerritt/workspace/joxa/src/test.jxa"}],
                   [{c_bitstr,

[6,{file,"/home/emerritt/workspace/joxa/src/test.jxa"}],
                     {c_literal,

[6,{file,"/home/emerritt/workspace/joxa/src/test.jxa"}],
                      34},
                     {c_literal,

[6,{file,"/home/emerritt/workspace/joxa/src/test.jxa"}],
                      8},
                     {c_literal,[compiler_generated],1},
                     {c_literal,

[6,{file,"/home/emerritt/workspace/joxa/src/test.jxa"}],
                      integer},
                     {c_literal,

[6,{file,"/home/emerritt/workspace/joxa/src/test.jxa"}],
                      [unsigned,big]}}]}},
                 {c_clause,

[7,{file,"/home/emerritt/workspace/joxa/src/test.jxa"}],
                  [{c_var,

[7,{file,"/home/emerritt/workspace/joxa/src/test.jxa"}],
                    '_GENSYM_727BDA1'}],
                  {c_literal,

[7,{file,"/home/emerritt/workspace/joxa/src/test.jxa"}],
                   true},
                  {c_literal,

[8,{file,"/home/emerritt/workspace/joxa/src/test.jxa"}],
                   foo}}]}}}]}


More information about the erlang-bugs mailing list