summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorHans Bolinder <hasse@erlang.org>2021-03-15 06:51:34 +0100
committerHans Bolinder <hasse@erlang.org>2021-03-15 06:51:34 +0100
commit337be5f912eb7acef3b59f3752600df4e331fe45 (patch)
tree505c6796480318f7e14a49cfbad8fcb183de50d9 /lib
parent13f941d2ed90b3dcb0f8fc97bbad79bcdc474f64 (diff)
parent67100e3243fd1bc56a00e0987bafb58e8a19f0e4 (diff)
downloaderlang-337be5f912eb7acef3b59f3752600df4e331fe45.tar.gz
Merge branch 'hasse/stdlib/column_fixes/PR-16824'
* hasse/stdlib/column_fixes/PR-16824: stdlib: Fix minor issues regarding error locations
Diffstat (limited to 'lib')
-rw-r--r--lib/compiler/src/v3_core.erl6
-rw-r--r--lib/compiler/test/compile_SUITE.erl10
-rw-r--r--lib/compiler/test/warnings_SUITE.erl4
-rw-r--r--lib/stdlib/src/erl_expand_records.erl11
-rw-r--r--lib/stdlib/src/erl_lint.erl4
-rw-r--r--lib/stdlib/src/erl_parse.yrl34
-rw-r--r--lib/stdlib/test/qlc_SUITE.erl2
7 files changed, 37 insertions, 34 deletions
diff --git a/lib/compiler/src/v3_core.erl b/lib/compiler/src/v3_core.erl
index cd5c4f5090..396ae6f25d 100644
--- a/lib/compiler/src/v3_core.erl
+++ b/lib/compiler/src/v3_core.erl
@@ -960,8 +960,8 @@ maybe_warn_repeated_keys(Ck, K0, Used, St) ->
K = cerl:concrete(Ck),
case sets:is_element(K,Used) of
true ->
- Location = element(2, K0),
- {Used, add_warning(Location, {map_key_repeated,K}, St)};
+ L = erl_parse:first_anno(K0),
+ {Used, add_warning(L, {map_key_repeated,K}, St)};
false ->
{sets:add_element(K,Used), St}
end
@@ -1008,7 +1008,7 @@ try_after(Line, Es0, As0, St0) ->
%% to suppress false "unmatched return" warnings in tools that look at core
%% Erlang, such as `dialyzer`.
ta_sanitize_as([Expr], Line) ->
- [{match, Line, {var,[],'_'}, Expr}];
+ [{match, Line, {var,Line,'_'}, Expr}];
ta_sanitize_as([Expr | Exprs], Line) ->
[Expr | ta_sanitize_as(Exprs, Line)].
diff --git a/lib/compiler/test/compile_SUITE.erl b/lib/compiler/test/compile_SUITE.erl
index 222143858e..e3f03d4959 100644
--- a/lib/compiler/test/compile_SUITE.erl
+++ b/lib/compiler/test/compile_SUITE.erl
@@ -915,11 +915,13 @@ tuple_calls(Config) when is_list(Config) ->
Anno = erl_anno:new(1),
Forms = [{attribute,Anno,export,[{size,1},{store,1}]},
{function,Anno,size,1,
- [{clause,Anno,[{var,[],mod}],[],
- [{call,[],{remote,[],{var,[],mod},{atom,[],size}},[]}]}]},
+ [{clause,Anno,[{var,Anno,mod}],[],
+ [{call,Anno,{remote,Anno,{var,Anno,mod},{atom,Anno,size}},
+ []}]}]},
{function,Anno,store,1,
- [{clause,Anno,[{var,[],mod}],[],
- [{call,[],{remote,[],{var,[],mod},{atom,[],store}},[{atom,[],key},{atom,[],value}]}]}]}],
+ [{clause,Anno,[{var,Anno,mod}],[],
+ [{call,Anno,{remote,Anno,{var,Anno,mod},{atom,Anno,store}},
+ [{atom,Anno,key},{atom,Anno,value}]}]}]}],
TupleCallsFalse = [{attribute,Anno,module,tuple_calls_false}|Forms],
{ok,_,TupleCallsFalseBinary} = compile:forms(TupleCallsFalse, [binary]),
diff --git a/lib/compiler/test/warnings_SUITE.erl b/lib/compiler/test/warnings_SUITE.erl
index 58ab08fb5a..6aebf61b09 100644
--- a/lib/compiler/test/warnings_SUITE.erl
+++ b/lib/compiler/test/warnings_SUITE.erl
@@ -101,7 +101,7 @@ pattern(Config) when is_list(Config) ->
{warnings,
[{{2,15},v3_core,{nomatch,pattern}},
{{6,20},v3_core,{nomatch,pattern}},
- {{11,20},v3_core,{nomatch,pattern}}
+ {{11,18},v3_core,{nomatch,pattern}}
]}}],
[] = run(Config, Ts),
ok.
@@ -984,8 +984,8 @@ bit_syntax(Config) ->
{{9,19},sys_core_fold,{nomatch,{bit_syntax_type,a,utf16}}},
{{10,19},sys_core_fold,{nomatch,{bit_syntax_type,a,utf32}}},
{{11,19},sys_core_fold,{nomatch,{bit_syntax_type,a,utf32}}},
+ {{12,35},sys_core_fold,{nomatch,no_clause}},
{{12,37},sys_core_fold,{nomatch,{bit_syntax_size,bad}}},
- {{12,45},sys_core_fold,{nomatch,no_clause}},
{{15,21},sys_core_fold,{nomatch,{bit_syntax_unsigned,-42}}},
{{17,21},sys_core_fold,{nomatch,{bit_syntax_type,42,binary}}},
{{19,19},sys_core_fold,{nomatch,{bit_syntax_unicode,1114112}}}
diff --git a/lib/stdlib/src/erl_expand_records.erl b/lib/stdlib/src/erl_expand_records.erl
index ad824dae3a..08b968f18b 100644
--- a/lib/stdlib/src/erl_expand_records.erl
+++ b/lib/stdlib/src/erl_expand_records.erl
@@ -540,13 +540,8 @@ normalise_fields(Fs) ->
record_fields(R, Anno, St) ->
Fields = maps:get(R, St#exprec.records),
- case St#exprec.dialyzer of
- true ->
- [{record_field,Anno,{atom,Anno,F},copy_expr(Di, Anno)} ||
- {record_field,_Anno,{atom,_AnnoA,F},Di} <- Fields];
- false ->
- Fields
- end.
+ [{record_field,Anno,{atom,Anno,F},copy_expr(Di, Anno)} ||
+ {record_field,_Anno,{atom,_AnnoA,F},Di} <- Fields].
find_field(F, [{record_field,_,{atom,_,F},Val} | _]) -> {ok,Val};
find_field(F, [_ | Fs]) -> find_field(F, Fs);
@@ -707,7 +702,7 @@ record_update(R, Name, Fs, Us0, St0) ->
end,
{{block,Anno,Pre ++ [{match,Anno,Var,R},Update]},St}.
-%% record_match(Record, RecordName, [RecDefField], [Update], State)
+%% record_match(Record, RecordName, Anno, [RecDefField], [Update], State)
%% Build a 'case' expression to modify record fields.
record_match(R, Name, AnnoR, Fs, Us, St0) ->
diff --git a/lib/stdlib/src/erl_lint.erl b/lib/stdlib/src/erl_lint.erl
index db2a5f57db..4cfc3306cb 100644
--- a/lib/stdlib/src/erl_lint.erl
+++ b/lib/stdlib/src/erl_lint.erl
@@ -2576,8 +2576,8 @@ expr({op,Anno,Op,L,R}, Vt, St0) when Op =:= 'orelse'; Op =:= 'andalso' ->
expr({op,_Anno,_Op,L,R}, Vt, St) ->
expr_list([L,R], Vt, St); %They see the same variables
%% The following are not allowed to occur anywhere!
-expr({remote,Anno,_M,_F}, _Vt, St) ->
- {[],add_error(Anno, illegal_expr, St)}.
+expr({remote,_Anno,M,_F}, _Vt, St) ->
+ {[],add_error(erl_parse:first_anno(M), illegal_expr, St)}.
%% expr_list(Expressions, Variables, State) ->
%% {UsedVarTable,State}
diff --git a/lib/stdlib/src/erl_parse.yrl b/lib/stdlib/src/erl_parse.yrl
index e3e72c9444..4e6f70b2ee 100644
--- a/lib/stdlib/src/erl_parse.yrl
+++ b/lib/stdlib/src/erl_parse.yrl
@@ -226,7 +226,7 @@ clause_body -> '->' exprs: '$2'.
expr -> 'catch' expr : {'catch',?anno('$1'),'$2'}.
-expr -> expr '=' expr : {match,?anno('$2'),'$1','$3'}.
+expr -> expr '=' expr : {match,first_anno('$1'),'$1','$3'}.
expr -> expr '!' expr : ?mkop2('$1', '$2', '$3').
expr -> expr 'orelse' expr : ?mkop2('$1', '$2', '$3').
expr -> expr 'andalso' expr : ?mkop2('$1', '$2', '$3').
@@ -240,7 +240,7 @@ expr -> function_call : '$1'.
expr -> record_expr : '$1'.
expr -> expr_remote : '$1'.
-expr_remote -> expr_max ':' expr_max : {remote,first_anno('$1'),'$1','$3'}.
+expr_remote -> expr_max ':' expr_max : {remote,?anno('$2'),'$1','$3'}.
expr_remote -> expr_max : '$1'.
expr_max -> var : '$1'.
@@ -258,7 +258,7 @@ expr_max -> receive_expr : '$1'.
expr_max -> fun_expr : '$1'.
expr_max -> try_expr : '$1'.
-pat_expr -> pat_expr '=' pat_expr : {match,?anno('$2'),'$1','$3'}.
+pat_expr -> pat_expr '=' pat_expr : {match,first_anno('$1'),'$1','$3'}.
pat_expr -> pat_expr comp_op pat_expr : ?mkop2('$1', '$2', '$3').
pat_expr -> pat_expr list_op pat_expr : ?mkop2('$1', '$2', '$3').
pat_expr -> pat_expr add_op pat_expr : ?mkop2('$1', '$2', '$3').
@@ -370,13 +370,13 @@ record_expr -> '#' atom '.' atom :
record_expr -> '#' atom record_tuple :
{record,?anno('$1'),element(3, '$2'),'$3'}.
record_expr -> expr_max '#' atom '.' atom :
- {record_field,first_anno('$1'),'$1',element(3, '$3'),'$5'}.
+ {record_field,?anno('$2'),'$1',element(3, '$3'),'$5'}.
record_expr -> expr_max '#' atom record_tuple :
- {record,first_anno('$1'),'$1',element(3, '$3'),'$4'}.
+ {record,?anno('$2'),'$1',element(3, '$3'),'$4'}.
record_expr -> record_expr '#' atom '.' atom :
- {record_field,first_anno('$1'),'$1',element(3, '$3'),'$5'}.
+ {record_field,?anno('$2'),'$1',element(3, '$3'),'$5'}.
record_expr -> record_expr '#' atom record_tuple :
- {record,first_anno('$1'),'$1',element(3, '$3'),'$4'}.
+ {record,?anno('$2'),'$1',element(3, '$3'),'$4'}.
record_tuple -> '{' '}' : [].
record_tuple -> '{' record_fields '}' : '$2'.
@@ -1350,7 +1350,17 @@ first_anno(Abstract) ->
catch fold_anno(F, Anno0, Abstract).
last_anno(Abstract) ->
- Anno = lists:last(sort_annos(Abstract)),
+ Fun = fun(Anno, '*') ->
+ Anno;
+ (Anno, Anno0) ->
+ case loc_lte(Anno, Anno0) of
+ true ->
+ Anno0;
+ false ->
+ Anno
+ end
+ end,
+ Anno = find_anno(Abstract, Fun),
case erl_anno:end_location(Anno) of
undefined ->
Anno;
@@ -1358,12 +1368,8 @@ last_anno(Abstract) ->
erl_anno:set_location(EndLocation, Anno)
end.
-sort_annos(Abstract) ->
- AllAnnos = fold_anno(fun(Anno, Acc) -> [Anno|Acc] end, [], Abstract),
- CF = fun(Anno1, Anno2) ->
- loc_lte(erl_anno:location(Anno1), erl_anno:location(Anno2))
- end,
- lists:sort(CF, AllAnnos).
+find_anno(Abstract, Fun) ->
+ fold_anno(Fun, '*', Abstract).
loc_lte(Line1, Location2) when is_integer(Line1) ->
loc_lte({Line1, 1}, Location2);
diff --git a/lib/stdlib/test/qlc_SUITE.erl b/lib/stdlib/test/qlc_SUITE.erl
index 1c1885eec4..827af0bb18 100644
--- a/lib/stdlib/test/qlc_SUITE.erl
+++ b/lib/stdlib/test/qlc_SUITE.erl
@@ -6289,7 +6289,7 @@ otp_7238(Config) when is_list(Config) ->
<<"nomatch_template1() ->
qlc:q([{X} = {} || X <- []]).">>,
[],
- {warnings,[{{2,27},sys_core_fold,{nomatch,no_clause}}]}}
+ {warnings,[{{2,23},sys_core_fold,{nomatch,no_clause}}]}}
],
[] = compile(Config, T1),