diff options
author | John Högberg <[email protected]> | 2019-03-19 09:15:04 +0100 |
---|---|---|
committer | John Högberg <[email protected]> | 2019-03-19 09:15:04 +0100 |
commit | 47b496da10cfedeea8a0341ce13c76de3c132a57 (patch) | |
tree | 8c7cc18efcc99d73466017d4da5c9bd3f23a7051 /lib/compiler/test | |
parent | 875eef340a203264702cfda1928c78c30ed897e1 (diff) | |
parent | b79cde3bb7ddf34b4c1f6411393feec9ef85340a (diff) | |
download | otp-47b496da10cfedeea8a0341ce13c76de3c132a57.tar.gz otp-47b496da10cfedeea8a0341ce13c76de3c132a57.tar.bz2 otp-47b496da10cfedeea8a0341ce13c76de3c132a57.zip |
Merge branch 'john/compiler/fix-eq-type-infererence-in-validator/ERL-886'
* john/compiler/fix-eq-type-infererence-in-validator/ERL-886:
beam_validator: Infer types on both sides of '=:='
Diffstat (limited to 'lib/compiler/test')
-rw-r--r-- | lib/compiler/test/beam_validator_SUITE.erl | 32 |
1 files changed, 30 insertions, 2 deletions
diff --git a/lib/compiler/test/beam_validator_SUITE.erl b/lib/compiler/test/beam_validator_SUITE.erl index 8b39fce479..de5a3c2873 100644 --- a/lib/compiler/test/beam_validator_SUITE.erl +++ b/lib/compiler/test/beam_validator_SUITE.erl @@ -34,7 +34,8 @@ undef_label/1,illegal_instruction/1,failing_gc_guard_bif/1, map_field_lists/1,cover_bin_opt/1, val_dsetel/1,bad_tuples/1,bad_try_catch_nesting/1, - receive_stacked/1,aliased_types/1,type_conflict/1]). + receive_stacked/1,aliased_types/1,type_conflict/1, + infer_on_eq/1]). -include_lib("common_test/include/ct.hrl"). @@ -63,7 +64,8 @@ groups() -> undef_label,illegal_instruction,failing_gc_guard_bif, map_field_lists,cover_bin_opt,val_dsetel, bad_tuples,bad_try_catch_nesting, - receive_stacked,aliased_types,type_conflict]}]. + receive_stacked,aliased_types,type_conflict, + infer_on_eq]}]. init_per_suite(Config) -> test_lib:recompile(?MODULE), @@ -651,6 +653,32 @@ type_conflict_1(C) -> end, {C#r.e1, TRes}. +%% ERL-886; validation failed to infer types on both sides of '=:=' + +infer_on_eq(Config) when is_list(Config) -> + {ok, gurka} = infer_on_eq_1(id({gurka})), + {ok, gaffel} = infer_on_eq_2(id({gaffel})), + {ok, elefant} = infer_on_eq_3(id({elefant})), + {ok, myra} = infer_on_eq_4(id({myra})), + ok. + +infer_on_eq_1(T) -> + 1 = erlang:tuple_size(T), + {ok, erlang:element(1, T)}. + +infer_on_eq_2(T) -> + Size = erlang:tuple_size(T), + Size = 1, + {ok, erlang:element(1, T)}. + +infer_on_eq_3(T) -> + true = 1 =:= erlang:tuple_size(T), + {ok, erlang:element(1, T)}. + +infer_on_eq_4(T) -> + true = erlang:tuple_size(T) =:= 1, + {ok, erlang:element(1, T)}. + %%%------------------------------------------------------------------------- transform_remove(Remove, Module) -> |