diff options
-rw-r--r-- | lib/dialyzer/test/small_SUITE_data/results/confusing_record_warning | 3 | ||||
-rw-r--r-- | lib/dialyzer/test/small_SUITE_data/src/confusing_record_warning.erl | 19 |
2 files changed, 22 insertions, 0 deletions
diff --git a/lib/dialyzer/test/small_SUITE_data/results/confusing_record_warning b/lib/dialyzer/test/small_SUITE_data/results/confusing_record_warning new file mode 100644 index 0000000000..ac3d89b02b --- /dev/null +++ b/lib/dialyzer/test/small_SUITE_data/results/confusing_record_warning @@ -0,0 +1,3 @@ + +confusing_record_warning.erl:18: Function test/1 has no local return +confusing_record_warning.erl:18: Matching of pattern {'r', [_]} tagged with a record name violates the declared type of #r{field::'binary' | 'undefined'} diff --git a/lib/dialyzer/test/small_SUITE_data/src/confusing_record_warning.erl b/lib/dialyzer/test/small_SUITE_data/src/confusing_record_warning.erl new file mode 100644 index 0000000000..8af74e0914 --- /dev/null +++ b/lib/dialyzer/test/small_SUITE_data/src/confusing_record_warning.erl @@ -0,0 +1,19 @@ +%%--------------------------------------------------------------------- +%% A user complained that dialyzer produces a weird warning for the +%% following program. I explained to him that there is an implicit +%% assumption that when a record is typed one cannot have types of +%% the same size which are tagged by the record name whose elements +%% have different types than the ones declared in the record. +%% +%% But the warning from dialyzer was weird nonetheless: +%% The pattern {'r', [_]} can never match the type any() +%% We should clearly give some less confusing warning in this case. +%%--------------------------------------------------------------------- +-module(confusing_record_warning). + +-export([test/1]). + +-record(r, {field :: binary}). + +test({r, [_]}) -> + #r{field = <<42>>}. |