diff options
author | Magnus Lång <[email protected]> | 2016-02-28 00:17:48 +0100 |
---|---|---|
committer | Hans Bolinder <[email protected]> | 2016-04-28 16:16:09 +0200 |
commit | ebd967522612333e52a884181e6132b1ba7e5239 (patch) | |
tree | cd12d37cd4fe9d375cf15acbad8d08e5a4542af5 /lib/dialyzer/test/small_SUITE_data | |
parent | e3ac51b173585f84c397ae38c27d772be2d308c6 (diff) | |
download | otp-ebd967522612333e52a884181e6132b1ba7e5239.tar.gz otp-ebd967522612333e52a884181e6132b1ba7e5239.tar.bz2 otp-ebd967522612333e52a884181e6132b1ba7e5239.zip |
dialyzer: Unfold cerl patterns containing maps
Dialyzer relies heavily on the assumption that the type of a literal
that is used as a pattern is the type of any value that can match that
pattern. For maps, that is not true, and it was causing bad analysis
results. A new help function dialyzer_utils:refold_pattern/1 identifies
maps in literal patterns, and unfolds and labels them, allowing them to
be properly analysed.
Diffstat (limited to 'lib/dialyzer/test/small_SUITE_data')
-rw-r--r-- | lib/dialyzer/test/small_SUITE_data/results/maps1 | 5 |
1 files changed, 2 insertions, 3 deletions
diff --git a/lib/dialyzer/test/small_SUITE_data/results/maps1 b/lib/dialyzer/test/small_SUITE_data/results/maps1 index 6cd1c662c4..ec8748b7b8 100644 --- a/lib/dialyzer/test/small_SUITE_data/results/maps1 +++ b/lib/dialyzer/test/small_SUITE_data/results/maps1 @@ -1,5 +1,4 @@ maps1.erl:43: Function t3/0 has no local return -maps1.erl:46: Function foo/2 has no local return -maps1.erl:47: A key of type 'beta' cannot exist in a map of type #{'alfa':=42} -maps1.erl:52: The call Mod:'function'(~{'literal'=>'map'}~,'another_arg') requires that Mod is of type atom() not #{} +maps1.erl:44: The call maps1:foo(~{'greger'=>3, ~{'arne'=>'anka'}~=>45}~,1) will never return since it differs in the 1st and 2nd argument from the success typing arguments: (#{'beta':=_, ...},'b') +maps1.erl:52: The variable Mod can never match since previous clauses completely covered the type #{} |