aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGuilherme Andrade <[email protected]>2018-01-01 17:48:09 +0000
committerHans Bolinder <[email protected]>2018-01-09 14:18:30 +0100
commit21214178d05ffa482d7377a22285b38834566d2c (patch)
tree61a470edf6c6ec3578412ba176f9cb78e111f189
parent276117e6322bb7cc299c9e22beec0016a32f7806 (diff)
downloadotp-21214178d05ffa482d7377a22285b38834566d2c.tar.gz
otp-21214178d05ffa482d7377a22285b38834566d2c.tar.bz2
otp-21214178d05ffa482d7377a22285b38834566d2c.zip
Fix false Dialyzer warnings for erl_tar:table/1
'tar_entry()' values are only returned if we specify the 'verbose' option when calling table/2, which table/1 doesn't do. Now, it appears that Dialyzer as of OTP 20 is clever enough to realize that the return type of table/1 must intersect with the return type of table/2, and so it ignores the fact that table/1 says it returns strings, and therefore its callers are expected to be dealing with 'tar_entry()' tuples, and never with strings. This is obviously a mismatch between what the code does and what the spec says is does, leading to false Dialyzer warnings on code that uses table/1 (and, presumably, also table/2 when called without the 'verbose' option.)
-rw-r--r--lib/stdlib/src/erl_tar.erl2
1 files changed, 1 insertions, 1 deletions
diff --git a/lib/stdlib/src/erl_tar.erl b/lib/stdlib/src/erl_tar.erl
index 76f0b38108..5ee584d612 100644
--- a/lib/stdlib/src/erl_tar.erl
+++ b/lib/stdlib/src/erl_tar.erl
@@ -189,7 +189,7 @@ table(Name) ->
%% Returns a list of names of the files in the tar file Name.
%% Options accepted: compressed, verbose, cooked.
-spec table(open_handle(), [compressed | verbose | cooked]) ->
- {ok, [tar_entry()]} | {error, term()}.
+ {ok, [string() | tar_entry()]} | {error, term()}.
table(Name, Opts) when is_list(Opts) ->
foldl_read(Name, fun table1/4, [], table_opts(Opts)).