diff options
author | Hans Bolinder <[email protected]> | 2017-09-01 11:44:36 +0200 |
---|---|---|
committer | Hans Bolinder <[email protected]> | 2017-09-12 13:32:29 +0200 |
commit | 3d05725ceb26611ac8c19cc01df715089dc322d5 (patch) | |
tree | eeae656118cbb70744af4388cf9575b1c0cad481 /lib/dialyzer/test/map_SUITE_data/results/loop | |
parent | c3f50bc462cc850bdef6b77d1a7a58091a75c936 (diff) | |
download | otp-3d05725ceb26611ac8c19cc01df715089dc322d5.tar.gz otp-3d05725ceb26611ac8c19cc01df715089dc322d5.tar.bz2 otp-3d05725ceb26611ac8c19cc01df715089dc322d5.zip |
dialyzer: Modify handling of singleton map key types
The test case loop.erl shows that there is a problem with certain
singleton key types. Here the internal representation toggles between
#{a | b => ...} and #{a => ..., b => ...}
The choice is to turn #{a | b => ...} into #{a => ..., b => ...} early
(t_from_form()). The aim is to keep as much info as possible (in
pairs). However, including complex singleton keys (tuples, maps) in
this scheme is potentially too costly, and a bit complicated. So one
more choice is made: let atoms and number (and nothing else) be
singleton types, and let complex keys go into the default key.
Diffstat (limited to 'lib/dialyzer/test/map_SUITE_data/results/loop')
-rw-r--r-- | lib/dialyzer/test/map_SUITE_data/results/loop | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/lib/dialyzer/test/map_SUITE_data/results/loop b/lib/dialyzer/test/map_SUITE_data/results/loop new file mode 100644 index 0000000000..2e956a5709 --- /dev/null +++ b/lib/dialyzer/test/map_SUITE_data/results/loop @@ -0,0 +1,4 @@ + +loop.erl:63: The call loop:start_timer(#loop{state::'idle' | 'waiting',queues::#{'category1'=>#queue{limit::non_neg_integer(),buffer::[any()]}, 'category2'=>#queue{limit::non_neg_integer(),buffer::[any()]}},counters::#{'counter1':=10, 2:=10}}) does not have a term of type #loop{state::'idle' | 'waiting',timer::timer:tref(),queues::#{'category1'=>#queue{limit::non_neg_integer(),buffer::[any()]}, 'category2'=>#queue{limit::non_neg_integer(),buffer::[any()]}},counters::#{'counter1'=>non_neg_integer(), 2=>non_neg_integer()}} (with opaque subterms) as 1st argument +loop.erl:67: Function wait/1 has no local return +loop.erl:85: Record construction #loop{state::'idle' | 'waiting',timer::{'error',_} | {'ok',timer:tref()},queues::#{'category1'=>#queue{limit::non_neg_integer(),buffer::[any()]}, 'category2'=>#queue{limit::non_neg_integer(),buffer::[any()]}},counters::#{'counter1'=>non_neg_integer(), 2=>non_neg_integer()}} violates the declared type of field timer::'undefined' | timer:tref() |