Uploaded image for project: 'Erlang/OTP'
  1. Erlang/OTP
  2. ERL-1454

dialyzer internal error: function_clause bind_pat_vars

    XMLWordPrintable

    Details

    • Type: Bug
    • Status: Resolved
    • Priority: Minor
    • Resolution: Fixed
    • Affects Version/s: OTP 24
    • Fix Version/s: 24.0
    • Component/s: dialyzer
    • Labels:
      None

      Description

      dialyzer has function_clause error when dialyzer_dataflow:handle_try/3 calls bind_pat_vars and the last line of bind_pat_vars/6 calls itself recursively.
      The call bind_pat_vars(Pats, Types ...) does not match because Pats is nonempty, and Types is empty. bind_pat_vars only has clauses for the cases where bind_pat_vars are either both empty or both nonempty.

      bind_pat_vars([Pat|PatLeft], [Type|TypeLeft], Acc, Map, State, Rev) ->

      Sample code to trigger the error:

      -module(sample).
      
      -export([main/1]).
      
      
      main(_Args) ->
          try
              A = foo()
          of
              A ->
                  ok
          catch
              _ ->
                  ok
          end.
      
      foo() ->
          1.
      

      reproduced with Dialyzer on master (e0e9d8bad472fa94f4919e6db798e45913dc9eec)

      as well as dialyzer --version 4.2.1 and v4.2

      Here is the error report:

      =ERROR REPORT==== 5-Jan-2021::12:00:24.412172 ===
      Error in process <0.109.0> with exit value:
      {function_clause,
       [{dialyzer_dataflow,bind_pat_vars,
         [[{c_var,[{label,11}],'A'}],
          [],
          [unit],
          {map,
           #{4 => any,5 => any,10 => unit,11 => any},
           #{4 => 5},
           [10,11,10,4,5],
           [{[],undefined}],
           #Ref<0.798598964.2052063233.208055>},
          {state,
           {callgraph,
            {digraph,#Ref<0.798598964.2052194305.207906>,
             #Ref<0.798598964.2052194305.207907>,
             #Ref<0.798598964.2052194305.207908>,true},
            {d,
             {digraph,#Ref<0.798598964.2052194305.208041>,
              #Ref<0.798598964.2052194305.208042>,
              #Ref<0.798598964.2052194305.208043>,false}},
            #Ref<0.798598964.2052194305.207896>,#Ref<0.798598964.2052194305.207900>,
            #Ref<0.798598964.2052194305.207897>,#Ref<0.798598964.2052194305.207898>,
            #Ref<0.798598964.2052194305.207899>,#Ref<0.798598964.2052194305.207901>,
            #Ref<0.798598964.2052194305.207902>,false,<0.96.0>},
           {codeserver,134,#Ref<0.798598964.2052194305.207882>,
            #Ref<0.798598964.2052194305.207886>,#Ref<0.798598964.2052194305.207885>,
            #Ref<0.798598964.2052194305.207883>,#Ref<0.798598964.2052194305.207884>,
            #Ref<0.798598964.2052194305.207888>,#Ref<0.798598964.2052194305.207887>,
            clean,clean,clean,clean},
           {dict,5,16,16,8,80,48,
            {[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[]},
            {{[[top|{map,#{},#{},[],[],undefined}],
               [32|{map,#{},#{},[],[],undefined}]],
              [],[],[],
              [[28|{map,#{},#{},[],[],undefined}]],
              [],[],
              [[37|{map,#{},#{},[],[],undefined}]],
              [],
              [[43|{map,#{},#{},[],[],undefined}]],
              [],[],[],[],[],[]}}},
           {dict,5,16,16,8,80,48,
            {[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[]},
            {{[[top|{[],none}],[32|{[],unit}]],
              [],[],[],
              [[28|{[any],unit}]],
              [],[],
              [[37|{[],unit}]],
              [],
              [[43|{[any],unit}]],
              [],[],[],[],[],[]}}},
           {dict,4,16,16,8,80,48,
            {[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[]},
            {{[[32|{sample,foo,0}]],
              [],[],[],
              [[28|{sample,main,1}]],
              [],[],
              [[37|{sample,module_info,0}]],
              [],
              [[43|{sample,module_info,1}]],
              [],[],[],[],[],[]}}},
           {set,0,16,16,8,80,48,
            {[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[]},
            {{[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[]}}},
           {plt,#Ref<0.798598964.2052194305.207854>,
            #Ref<0.798598964.2052194305.207856>,#Ref<0.798598964.2052194305.207855>,
            #Ref<0.798598964.2052194305.207857>,#Ref<0.798598964.2052194305.207858>},
           [],
           {races,undefined,undefined,empty,no_t,[],0,[],true,[]},
           #{},
           {dict,5,16,16,8,80,48,
            {[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[]},
            {{[[32|
                {c_fun,
                 [{label,32},{function,{foo,0}},17,{file,"0"}],
                 [],
                 {c_case,
                  [{label,31},{function,{foo,0}},17,{file,"0"}],
                  {c_values,[{label,29},{function,{foo,0}},17,{file,"0"}],[]},
                  [{c_clause,
                    [{label,30},17,{file,"0"}],
                    [],
                    {c_literal,[],true},
                    {c_literal,[18,{file,"0"}],1}}]}}],
               [top|
                {c_fun,
                 [{label,top}],
                 [],
                 {c_module,
                  [{label,44}],
                  {c_literal,[],sample},
                  [{c_var,[{label,0}],{main,1}},
                   {c_var,[{label,2}],{module_info,0}},
                   {c_var,[{label,3}],{module_info,1}}],
                  [{{c_literal,[1],file},
                    {c_literal,[1],[{"/Users/mheiber/sample.erl",1}]}}],
                  [{{c_var,[{label,0}],{main,1}},
                    {c_fun,
                     [{label,28},{function,{main,1}},6,{file,"0"}],
                     [{c_var,[{label,4},6,{file,"0"}],0}],
                     {c_case,
                      [{label,27},{function,{main,1}},6,{file,"0"}],
                      {c_var,[{label,4},{function,{main,1}},6,{file,"0"}],0},
                      [{c_clause,
                        [{label,26},6,{file,"0"}],
                        [{c_var,[{label,5},6,{file,"0"}],'_Args'}],
                        {c_literal,[],true},
                        {c_try,
                         [{label,25},7,{file,"0"}],
                         {c_let,
                          [{label,9}],
                          [{c_var,[{label,7},8,{file,"0"}],'A'}],
                          {c_apply,
                           [{label,6},8,{file,"0"}],
                           {c_var,[{label,1},8,{file,"0"}],{foo,0}},
                           []},
                          {c_values,
                           [{label,8},8,{file,"0"}],
                           [{c_var,[{label,7},8,{file,"0"}],'A'},
                            {c_var,[{label,7}],'A'}]}},
                         [{c_var,[{label,10}],2},{c_var,[{label,11}],'A'}],
                         {c_case,
                          [{label,15},7,{file,"0"}],
                          {c_var,[{label,10}],2},
                          [{c_clause,
                            [{label,14},10,{file,"0"}],
                            [{c_var,[{label,12}],8}],
                            {c_call,
                             [{label,13},10,{file,"0"}],
                             {c_literal,[],erlang},
                             {c_literal,[],'=:='},
                             [{c_var,[{label,12}],8},
                              {c_var,[{label,11},10,{file,"0"}],'A'}]},
                            {c_literal,[11,{file,"0"}],ok}}]},
                         [{c_var,[{label,16}],6},
                          {c_var,[{label,17}],5},
                          {c_var,[{label,18}],4}],
                         {c_case,
                          [{label,24},13,{file,"0"}],
                          {c_tuple,
                           [{label,19}],
                           [{c_var,[{label,16}],6},
                            {c_var,[{label,17}],5},
                            {c_var,[{label,18}],4}]},
                          [{c_clause,
                            [{label,23},13,{file,"0"}],
                            [{c_tuple,
                              [{label,22},13,{file,"0"}],
                              [{c_literal,[13,{file,"0"}],throw},
                               {c_var,[{label,21}],9},
                               {c_var,[{label,20}],10}]}],
                            {c_literal,[],true},
                            {c_literal,[14,{file,"0"}],ok}}]}}}]}}},
                   {{c_var,[{label,1}],{foo,0}},
                    {c_fun,
                     [{label,32},{function,{foo,0}},17,{file,"0"}],
                     [],
                     {c_case,
                      [{label,31},{function,{foo,0}},17,{file,"0"}],
                      {c_values,[{label,29},{function,{foo,0}},17,{file,"0"}],[]},
                      [{c_clause,
                        [{label,30},17,{file,"0"}],
                        [],
                        {c_literal,[],true},
                        {c_literal,[18,{file,"0"}],1}}]}}},
                   {{c_var,[{label,2}],{module_info,0}},
                    {c_fun,
                     [{label,37},{function,{module_info,0}},0,{file,"0"}],
                     [],
                     {c_case,
                      [{label,36},{function,{module_info,0}},0,{file,"0"}],
                      {c_values,
                       [{label,33},{function,{module_info,0}},0,{file,"0"}],
                       []},
                      [{c_clause,
                        [{label,35},0,{file,"0"}],
                        [],
                        {c_literal,[],true},
                        {c_call,
                         [{label,34},0,{file,"0"}],
                         {c_literal,[0,{file,"0"}],erlang},
                         {c_literal,[0,{file,"0"}],get_module_info},
                         [{c_literal,[0,{file,"0"}],sample}]}}]}}},
                   {{c_var,[{label,3}],{module_info,1}},
                    {c_fun,
                     [{label,43},{function,{module_info,1}},0,{file,"0"}],
                     [{c_var,[{label,38},0,{file,"0"}],0}],
                     {c_case,
                      [{label,42},{function,{module_info,1}},0,{file,"0"}],
                      {c_var,[{label,38},{function,{module_info,1}},0,{file,"0"}],0},
                      [{c_clause,
                        [{label,41},0,{file,"0"}],
                        [{c_var,[{label,39},0,{file,"0"}],'X'}],
                        {c_literal,[],true},
                        {c_call,
                         [{label,40},0,{file,"0"}],
                         {c_literal,[0,{file,"0"}],erlang},
                         {c_literal,[0,{file,"0"}],get_module_info},
                         [{c_literal,[0,{file,"0"}],sample},
                          {c_var,[{label,39},0,{file,"0"}],'X'}]}}]}}}]}}]],
              [],[],[],
              [[28|
                {c_fun,
                 [{label,28},{function,{main,1}},6,{file,"0"}],
                 [{c_var,[{label,4},6,{file,"0"}],0}],
                 {c_case,
                  [{label,27},{function,{main,1}},6,{file,"0"}],
                  {c_var,[{label,4},{function,{main,1}},6,{file,"0"}],0},
                  [{c_clause,
                    [{label,26},6,{file,"0"}],
                    [{c_var,[{label,5},6,{file,"0"}],'_Args'}],
                    {c_literal,[],true},
                    {c_try,
                     [{label,25},7,{file,"0"}],
                     {c_let,
                      [{label,9}],
                      [{c_var,[{label,7},8,{file,"0"}],'A'}],
                      {c_apply,
                       [{label,6},8,{file,"0"}],
                       {c_var,[{label,1},8,{file,"0"}],{foo,0}},
                       []},
                      {c_values,
                       [{label,8},8,{file,"0"}],
                       [{c_var,[{label,7},8,{file,"0"}],'A'},
                        {c_var,[{label,7}],'A'}]}},
                     [{c_var,[{label,10}],2},{c_var,[{label,11}],'A'}],
                     {c_case,
                      [{label,15},7,{file,"0"}],
                      {c_var,[{label,10}],2},
                      [{c_clause,
                        [{label,14},10,{file,"0"}],
                        [{c_var,[{label,12}],8}],
                        {c_call,
                         [{label,13},10,{file,"0"}],
                         {c_literal,[],erlang},
                         {c_literal,[],'=:='},
                         [{c_var,[{label,12}],8},
                          {c_var,[{label,11},10,{file,"0"}],'A'}]},
                        {c_literal,[11,{file,"0"}],ok}}]},
                     [{c_var,[{label,16}],6},
                      {c_var,[{label,17}],5},
                      {c_var,[{label,18}],4}],
                     {c_case,
                      [{label,24},13,{file,"0"}],
                      {c_tuple,
                       [{label,19}],
                       [{c_var,[{label,16}],6},
                        {c_var,[{label,17}],5},
                        {c_var,[{label,18}],4}]},
                      [{c_clause,
                        [{label,23},13,{file,"0"}],
                        [{c_tuple,
                          [{label,22},13,{file,"0"}],
                          [{c_literal,[13,{file,"0"}],throw},
                           {c_var,[{label,21}],9},
                           {c_var,[{label,20}],10}]}],
                        {c_literal,[],true},
                        {c_literal,[14,{file,"0"}],ok}}]}}}]}}]],
              [],[],
              [[37|
                {c_fun,
                 [{label,37},{function,{module_info,0}},0,{file,"0"}],
                 [],
                 {c_case,
                  [{label,36},{function,{module_info,0}},0,{file,"0"}],
                  {c_values,[{label,33},{function,{module_info,0}},0,{file,"0"}],[]},
                  [{c_clause,
                    [{label,35},0,{file,"0"}],
                    [],
                    {c_literal,[],true},
                    {c_call,
                     [{label,34},0,{file,"0"}],
                     {c_literal,[0,{file,"0"}],erlang},
                     {c_literal,[0,{file,"0"}],get_module_info},
                     [{c_literal,[0,{file,"0"}],sample}]}}]}}]],
              [],
              [[43|
                {c_fun,
                 [{label,43},{function,{module_info,1}},0,{file,"0"}],
                 [{c_var,[{label,38},0,{file,"0"}],0}],
                 {c_case,
                  [{label,42},{function,{module_info,1}},0,{file,"0"}],
                  {c_var,[{label,38},{function,{module_info,1}},0,{file,"0"}],0},
                  [{c_clause,
                    [{label,41},0,{file,"0"}],
                    [{c_var,[{label,39},0,{file,"0"}],'X'}],
                    {c_literal,[],true},
                    {c_call,
                     [{label,40},0,{file,"0"}],
                     {c_literal,[0,{file,"0"}],erlang},
                     {c_literal,[0,{file,"0"}],get_module_info},
                     [{c_literal,[0,{file,"0"}],sample},
                      {c_var,[{label,39},0,{file,"0"}],'X'}]}}]}}]],
              [],[],[],[],[],[]}}},
           false,[],
           {"%+"," ",
            {set,3,16,16,8,80,48,
             {[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[]},
             {{" ",[],[],[],[],[],[],"%",[],"+",[],[],[],[],[],[]}}}},
           sample,
           {sample,main,1}},
          false],
         [{file,"/Users/mheiber/otp/lib/dialyzer/src/dialyzer_dataflow.erl"},
          {line,1572}]},
        {dialyzer_dataflow,bind_pat_vars,5,
         [{file,"/Users/mheiber/otp/lib/dialyzer/src/dialyzer_dataflow.erl"},
          {line,1556}]},
        {dialyzer_dataflow,handle_try,3,
         [{file,"/Users/mheiber/otp/lib/dialyzer/src/dialyzer_dataflow.erl"},
          {line,1149}]},
        {dialyzer_dataflow,do_clause,7,
         [{file,"/Users/mheiber/otp/lib/dialyzer/src/dialyzer_dataflow.erl"},
          {line,1519}]},
        {dialyzer_dataflow,handle_clauses,10,
         [{file,"/Users/mheiber/otp/lib/dialyzer/src/dialyzer_dataflow.erl"},
          {line,1316}]},
        {dialyzer_dataflow,handle_case,3,
         [{file,"/Users/mheiber/otp/lib/dialyzer/src/dialyzer_dataflow.erl"},
          {line,1006}]},
        {dialyzer_dataflow,analyze_loop,1,
         [{file,"/Users/mheiber/otp/lib/dialyzer/src/dialyzer_dataflow.erl"},
          {line,226}]},
        {dialyzer_dataflow,analyze_module,6,
         [{file,"/Users/mheiber/otp/lib/dialyzer/src/dialyzer_dataflow.erl"},
          {line,178}]}]}
      
      ** exception throw: {dialyzer_error,"Analysis failed with error:\n{function_clause,\n [{dialyzer_dataflow,bind_pat_vars,\n   [[{c_var,[{label,11}],'A'}],\n    [],\n    [unit],\n    {map,\n     #{4 => any,5 => any,10 => unit,11 => any},\n     #{4 => 5},\n     [10,11,10,4,5],\n     [{[],undefined}],\n     #Ref<0.798598964.2052063233.208055>},\n    {state,\n     {callgraph,\n      {digraph,#Ref<0.798598964.2052194305.207906>,\n       #Ref<0.798598964.2052194305.207907>,\n       #Ref<0.798598964.2052194305.207908>,true},\n      {d,\n       {digraph,#Ref<0.798598964.2052194305.208041>,\n        #Ref<0.798598964.2052194305.208042>,\n        #Ref<0.798598964.2052194305.208043>,false}},\n      #Ref<0.798598964.2052194305.207896>,#Ref<0.798598964.2052194305.207900>,\n      #Ref<0.798598964.2052194305.207897>,#Ref<0.798598964.2052194305.207898>,\n      #Ref<0.798598964.2052194305.207899>,#Ref<0.798598964.2052194305.207901>,\n      #Ref<0.798598964.2052194305.207902>,false,<0.96.0>},\n     {codeserver,134,#Ref<0.798598964.2052194305.207882>,\n      #Ref<0.798598964.2052194305.207886>,#Ref<0.798598964.2052194305.207885>,\n      #Ref<0.798598964.2052194305.207883>,#Ref<0.798598964.2052194305.207884>,\n      #Ref<0.798598964.2052194305.207888>,#Ref<0.798598964.2052194305.207887>,\n      clean,clean,clean,clean},\n     {dict,5,16,16,8,80,48,\n      {[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[]},\n      {{[[top|{map,#{},#{},[],[],undefined}],\n         [32|{map,#{},#{},[],[],undefined}]],\n        [],[],[],\n        [[28|{map,#{},#{},[],[],undefined}]],\n        [],[],\n        [[37|{map,#{},#{},[],[],undefined}]],\n        [],\n        [[43|{map,#{},#{},[],[],undefined}]],\n        [],[],[],[],[],[]}}},\n     {dict,5,16,16,8,80,48,\n      {[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[]},\n      {{[[top|{[],none}],[32|{[],unit}]],\n        [],[],[],\n        [[28|{[any],unit}]],\n        [],[],\n        [[37|{[],unit}]],\n        [],\n        [[43|{[any],unit}]],\n        [],[],[],[],[],[]}}},\n     {dict,4,16,16,8,80,48,\n      {[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[]},\n      {{[[32|{sample,foo,0}]],\n        [],[],[],\n        [[28|{sample,main,1}]],\n        [],[],\n        [[37|{sample,module_info,0}]],\n        [],\n        [[43|{sample,module_info,1}]],\n        [],[],[],[],[],[]}}},\n     {set,0,16,16,8,80,48,\n      {[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[]},\n      {{[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[]}}},\n     {plt,#Ref<0.798598964.2052194305.207854>,\n      #Ref<0.798598964.2052194305.207856>,#Ref<0.798598964.2052194305.207855>,\n      #Ref<0.798598964.2052194305.207857>,#Ref<0.798598964.2052194305.207858>},\n     [],\n     {races,undefined,undefined,empty,no_t,[],0,[],true,[]},\n     #{},\n     {dict,5,16,16,8,80,48,\n      {[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[]},\n      {{[[32|\n          {c_fun,\n           [{label,32},{function,{foo,0}},17,{file,\"0\"}],\n           [],\n           {c_case,\n            [{label,31},{function,{foo,0}},17,{file,\"0\"}],\n            {c_values,[{label,29},{function,{foo,0}},17,{file,\"0\"}],[]},\n            [{c_clause,\n              [{label,30},17,{file,\"0\"}],\n              [],\n              {c_literal,[],true},\n              {c_literal,[18,{file,\"0\"}],1}}]}}],\n         [top|\n          {c_fun,\n           [{label,top}],\n           [],\n           {c_module,\n            [{label,44}],\n            {c_literal,[],sample},\n            [{c_var,[{label,0}],{main,1}},\n             {c_var,[{label,2}],{module_info,0}},\n             {c_var,[{label,3}],{module_info,1}}],\n            [{{c_literal,[1],file},\n              {c_literal,[1],[{\"/Users/mheiber/sample.erl\",1}]}}],\n            [{{c_var,[{label,0}],{main,1}},\n              {c_fun,\n               [{label,28},{function,{main,1}},6,{file,\"0\"}],\n               [{c_var,[{label,4},6,{file,\"0\"}],0}],\n               {c_case,\n                [{label,27},{function,{main,1}},6,{file,\"0\"}],\n                {c_var,[{label,4},{function,{main,1}},6,{file,\"0\"}],0},\n                [{c_clause,\n                  [{label,26},6,{file,\"0\"}],\n                  [{c_var,[{label,5},6,{file,\"0\"}],'_Args'}],\n                  {c_literal,[],true},\n                  {c_try,\n                   [{label,25},7,{file,\"0\"}],\n                   {c_let,\n                    [{label,9}],\n                    [{c_var,[{label,7},8,{file,\"0\"}],'A'}],\n                    {c_apply,\n                     [{label,6},8,{file,\"0\"}],\n                     {c_var,[{label,1},8,{file,\"0\"}],{foo,0}},\n                     []},\n                    {c_values,\n                     [{label,8},8,{file,\"0\"}],\n                     [{c_var,[{label,7},8,{file,\"0\"}],'A'},\n                      {c_var,[{label,7}],'A'}]}},\n                   [{c_var,[{label,10}],2},{c_var,[{label,11}],'A'}],\n                   {c_case,\n                    [{label,15},7,{file,\"0\"}],\n                    {c_var,[{label,10}],2},\n                    [{c_clause,\n                      [{label,14},10,{file,\"0\"}],\n                      [{c_var,[{label,12}],8}],\n                      {c_call,\n                       [{label,13},10,{file,\"0\"}],\n                       {c_literal,[],erlang},\n                       {c_literal,[],'=:='},\n                       [{c_var,[{label,12}],8},\n                        {c_var,[{label,11},10,{file,\"0\"}],'A'}]},\n                      {c_literal,[11,{file,\"0\"}],ok}}]},\n                   [{c_var,[{label,16}],6},\n                    {c_var,[{label,17}],5},\n                    {c_var,[{label,18}],4}],\n                   {c_case,\n                    [{label,24},13,{file,\"0\"}],\n                    {c_tuple,\n                     [{label,19}],\n                     [{c_var,[{label,16}],6},\n                      {c_var,[{label,17}],5},\n                      {c_var,[{label,18}],4}]},\n                    [{c_clause,\n                      [{label,23},13,{file,\"0\"}],\n                      [{c_tuple,\n                        [{label,22},13,{file,\"0\"}],\n                        [{c_literal,[13,{file,\"0\"}],throw},\n                         {c_var,[{label,21}],9},\n                         {c_var,[{label,20}],10}]}],\n                      {c_literal,[],true},\n                      {c_literal,[14,{file,\"0\"}],ok}}]}}}]}}},\n             {{c_var,[{label,1}],{foo,0}},\n              {c_fun,\n               [{label,32},{function,{foo,0}},17,{file,\"0\"}],\n               [],\n               {c_case,\n                [{label,31},{function,{foo,0}},17,{file,\"0\"}],\n                {c_values,[{label,29},{function,{foo,0}},17,{file,\"0\"}],[]},\n                [{c_clause,\n                  [{label,30},17,{file,\"0\"}],\n                  [],\n                  {c_literal,[],true},\n                  {c_literal,[18,{file,\"0\"}],1}}]}}},\n             {{c_var,[{label,2}],{module_info,0}},\n              {c_fun,\n               [{label,37},{function,{module_info,0}},0,{file,\"0\"}],\n               [],\n               {c_case,\n                [{label,36},{function,{module_info,0}},0,{file,\"0\"}],\n                {c_values,\n                 [{label,33},{function,{module_info,0}},0,{file,\"0\"}],\n                 []},\n                [{c_clause,\n                  [{label,35},0,{file,\"0\"}],\n                  [],\n                  {c_literal,[],true},\n                  {c_call,\n                   [{label,34},0,{file,\"0\"}],\n                   {c_literal,[0,{file,\"0\"}],erlang},\n                   {c_literal,[0,{file,\"0\"}],get_module_info},\n                   [{c_literal,[0,{file,\"0\"}],sample}]}}]}}},\n             {{c_var,[{label,3}],{module_info,1}},\n              {c_fun,\n               [{label,43},{function,{module_info,1}},0,{file,\"0\"}],\n               [{c_var,[{label,38},0,{file,\"0\"}],0}],\n               {c_case,\n                [{label,42},{function,{module_info,1}},0,{file,\"0\"}],\n                {c_var,[{label,38},{function,{module_info,1}},0,{file,\"0\"}],0},\n                [{c_clause,\n                  [{label,41},0,{file,\"0\"}],\n                  [{c_var,[{label,39},0,{file,\"0\"}],'X'}],\n                  {c_literal,[],true},\n                  {c_call,\n                   [{label,40},0,{file,\"0\"}],\n                   {c_literal,[0,{file,\"0\"}],erlang},\n                   {c_literal,[0,{file,\"0\"}],get_module_info},\n                   [{c_literal,[0,{file,\"0\"}],sample},\n                    {c_var,[{label,39},0,{file,\"0\"}],'X'}]}}]}}}]}}]],\n        [],[],[],\n        [[28|\n          {c_fun,\n           [{label,28},{function,{main,1}},6,{file,\"0\"}],\n           [{c_var,[{label,4},6,{file,\"0\"}],0}],\n           {c_case,\n            [{label,27},{function,{main,1}},6,{file,\"0\"}],\n            {c_var,[{label,4},{function,{main,1}},6,{file,\"0\"}],0},\n            [{c_clause,\n              [{label,26},6,{file,\"0\"}],\n              [{c_var,[{label,5},6,{file,\"0\"}],'_Args'}],\n              {c_literal,[],true},\n              {c_try,\n               [{label,25},7,{file,\"0\"}],\n               {c_let,\n                [{label,9}],\n                [{c_var,[{label,7},8,{file,\"0\"}],'A'}],\n                {c_apply,\n                 [{label,6},8,{file,\"0\"}],\n                 {c_var,[{label,1},8,{file,\"0\"}],{foo,0}},\n                 []},\n                {c_values,\n                 [{label,8},8,{file,\"0\"}],\n                 [{c_var,[{label,7},8,{file,\"0\"}],'A'},\n                  {c_var,[{label,7}],'A'}]}},\n               [{c_var,[{label,10}],2},{c_var,[{label,11}],'A'}],\n               {c_case,\n                [{label,15},7,{file,\"0\"}],\n                {c_var,[{label,10}],2},\n                [{c_clause,\n                  [{label,14},10,{file,\"0\"}],\n                  [{c_var,[{label,12}],8}],\n                  {c_call,\n                   [{label,13},10,{file,\"0\"}],\n                   {c_literal,[],erlang},\n                   {c_literal,[],'=:='},\n                   [{c_var,[{label,12}],8},\n                    {c_var,[{label,11},10,{file,\"0\"}],'A'}]},\n                  {c_literal,[11,{file,\"0\"}],ok}}]},\n               [{c_var,[{label,16}],6},\n                {c_var,[{label,17}],5},\n                {c_var,[{label,18}],4}],\n               {c_case,\n                [{label,24},13,{file,\"0\"}],\n                {c_tuple,\n                 [{label,19}],\n                 [{c_var,[{label,16}],6},\n                  {c_var,[{label,17}],5},\n                  {c_var,[{label,18}],4}]},\n                [{c_clause,\n                  [{label,23},13,{file,\"0\"}],\n                  [{c_tuple,\n                    [{label,22},13,{file,\"0\"}],\n                    [{c_literal,[13,{file,\"0\"}],throw},\n                     {c_var,[{label,21}],9},\n                     {c_var,[{label,20}],10}]}],\n                  {c_literal,[],true},\n                  {c_literal,[14,{file,\"0\"}],ok}}]}}}]}}]],\n        [],[],\n        [[37|\n          {c_fun,\n           [{label,37},{function,{module_info,0}},0,{file,\"0\"}],\n           [],\n           {c_case,\n            [{label,36},{function,{module_info,0}},0,{file,\"0\"}],\n            {c_values,[{label,33},{function,{module_info,0}},0,{file,\"0\"}],[]},\n            [{c_clause,\n              [{label,35},0,{file,\"0\"}],\n              [],\n              {c_literal,[],true},\n              {c_call,\n               [{label,34},0,{file,\"0\"}],\n               {c_literal,[0,{file,\"0\"}],erlang},\n               {c_literal,[0,{file,\"0\"}],get_module_info},\n               [{c_literal,[0,{file,\"0\"}],sample}]}}]}}]],\n        [],\n        [[43|\n          {c_fun,\n           [{label,43},{function,{module_info,1}},0,{file,\"0\"}],\n           [{c_var,[{label,38},0,{file,\"0\"}],0}],\n           {c_case,\n            [{label,42},{function,{module_info,1}},0,{file,\"0\"}],\n            {c_var,[{label,38},{function,{module_info,1}},0,{file,\"0\"}],0},\n            [{c_clause,\n              [{label,41},0,{file,\"0\"}],\n              [{c_var,[{label,39},0,{file,\"0\"}],'X'}],\n              {c_literal,[],true},\n              {c_call,\n               [{label,40},0,{file,\"0\"}],\n               {c_literal,[0,{file,\"0\"}],erlang},\n               {c_literal,[0,{file,\"0\"}],get_module_info},\n               [{c_literal,[0,{file,\"0\"}],sample},\n                {c_var,[{label,39},0,{file,\"0\"}],'X'}]}}]}}]],\n        [],[],[],[],[],[]}}},\n     false,[],\n     {\"%+\",\" \",\n      {set,3,16,16,8,80,48,\n       {[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[]},\n       {{\" \",[],[],[],[],[],[],\"%\",[],\"+\",[],[],[],[],[],[]}}}},\n     sample,\n     {sample,main,1}},\n    false],\n   [{file,\"/Users/mheiber/otp/lib/dialyzer/src/dialyzer_dataflow.erl\"},\n    {line,1572}]},\n  {dialyzer_dataflow,bind_pat_vars,5,\n   [{file,\"/Users/mheiber/otp/lib/dialyzer/src/dialyzer_dataflow.erl\"},\n    {line,1556}]},\n  {dialyzer_dataflow,handle_try,3,\n   [{file,\"/Users/mheiber/otp/lib/dialyzer/src/dialyzer_dataflow.erl\"},\n    {line,1149}]},\n  {dialyzer_dataflow,do_clause,7,\n   [{file,\"/Users/mheiber/otp/lib/dialyzer/src/dialyzer_dataflow.erl\"},\n    {line,1519}]},\n  {dialyzer_dataflow,handle_clauses,10,\n   [{file,\"/Users/mheiber/otp/lib/dialyzer/src/dialyzer_dataflow.erl\"},\n    {line,1316}]},\n  {dialyzer_dataflow,handle_case,3,\n   [{file,\"/Users/mheiber/otp/lib/dialyzer/src/dialyzer_dataflow.erl\"},\n    {line,1006}]},\n  {dialyzer_dataflow,analyze_loop,1,\n   [{file,\"/Users/mheiber/otp/lib/dialyzer/src/dialyzer_dataflow.erl\"},\n    {line,226}]},\n  {dialyzer_dataflow,analyze_module,6,\n   [{file,\"/Users/mheiber/otp/lib/dialyzer/src/dialyzer_dataflow.erl\"},\n    {line,178}]}]}\nLast messages in the log cache:\n  Reading files and computing callgraph... done in 0.04 secs\n  Removing edges... done in 0.00 secs"}
           in function  dialyzer_cl:cl_error/2 (/Users/mheiber/otp/lib/dialyzer/src/dialyzer_cl.erl, line 700)
           in call from dialyzer_cl:do_analysis/4 (/Users/mheiber/otp/lib/dialyzer/src/dialyzer_cl.erl, line 402)
           in call from dialyzer:run/1 (/Users/mheiber/otp/lib/dialyzer/src/dialyzer.erl, line 161)
      ```
      

        Attachments

          Activity

            People

            Assignee:
            bjorn Björn Gustavsson
            Reporter:
            mheiber mheiber
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

              Dates

              Created:
              Updated:
              Resolved: