File 3301-erl_lint-Stop-raising-warnings-for-underspecified-op.patch of Package erlang

From 15dfc32530ac0aade2702dd7265a71272c5ab431 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?John=20H=C3=B6gberg?= <john@erlang.org>
Date: Thu, 16 Mar 2023 13:04:31 +0100
Subject: [PATCH] erl_lint: Stop raising warnings for underspecified opaques

Opaque types are the only part of our "type" system that acts as
nominal types rather than sets-of-possible-values, so unlike
`-type()` attributes they are still meaningful when underspecified.
---
 lib/stdlib/src/erl_lint.erl        | 18 +-----------------
 lib/stdlib/test/erl_lint_SUITE.erl |  8 --------
 2 files changed, 1 insertion(+), 25 deletions(-)

diff --git a/lib/stdlib/src/erl_lint.erl b/lib/stdlib/src/erl_lint.erl
index 728f82b518..3cd31748c5 100644
--- a/lib/stdlib/src/erl_lint.erl
+++ b/lib/stdlib/src/erl_lint.erl
@@ -484,9 +484,6 @@ format_error({deprecated_builtin_type, {Name, Arity},
 format_error({not_exported_opaque, {TypeName, Arity}}) ->
     io_lib:format("opaque type ~tw~s is not exported",
                   [TypeName, gen_type_paren(Arity)]);
-format_error({underspecified_opaque, {TypeName, Arity}}) ->
-    io_lib:format("opaque type ~tw~s is underspecified and therefore meaningless",
-                  [TypeName, gen_type_paren(Arity)]);
 format_error({bad_dialyzer_attribute,Term}) ->
     io_lib:format("badly formed dialyzer attribute: ~tw", [Term]);
 format_error({bad_dialyzer_option,Term}) ->
@@ -2906,16 +2903,7 @@ type_def(Attr, Anno, TypeName, ProtoType, Args, St0) ->
                 true ->
                     add_error(Anno, {redefine_type, TypePair}, St0);
                 false ->
-                    St1 = case
-                              Attr =:= opaque andalso
-                              is_underspecified(ProtoType, Arity)
-                          of
-                              true ->
-                                  Warn = {underspecified_opaque, TypePair},
-                                  add_warning(Anno, Warn, St0);
-                              false -> St0
-                          end,
-                    StoreType(St1)
+                    StoreType(St0)
 	    end
     end.
 
@@ -2936,10 +2924,6 @@ warn_redefined_builtin_type(Anno, TypePair, #lint{compile=Opts}=St) ->
             St
     end.
 
-is_underspecified({type,_,term,[]}, 0) -> true;
-is_underspecified({type,_,any,[]}, 0) -> true;
-is_underspecified(_ProtType, _Arity) -> false.
-
 check_type(Types, St) ->
     {SeenVars, St1} = check_type_1(Types, maps:new(), St),
     maps:fold(fun(Var, {seen_once, Anno}, AccSt) ->
diff --git a/lib/stdlib/test/erl_lint_SUITE.erl b/lib/stdlib/test/erl_lint_SUITE.erl
index 93595459d4..c25cdeee2c 100644
--- a/lib/stdlib/test/erl_lint_SUITE.erl
+++ b/lib/stdlib/test/erl_lint_SUITE.erl
@@ -2938,14 +2938,6 @@ otp_10436(Config) when is_list(Config) ->
     {warnings,[{{4,14},erl_lint,{not_exported_opaque,{t2,0}}},
                {{4,14},erl_lint,{unused_type,{t2,0}}}]} =
         run_test2(Config, Ts, []),
-    Ts2 = <<"-module(otp_10436_2).
-             -export_type([t1/0, t2/0]).
-             -opaque t1() :: term().
-             -opaque t2() :: any().
-         ">>,
-    {warnings,[{{3,15},erl_lint,{underspecified_opaque,{t1,0}}},
-               {{4,15},erl_lint,{underspecified_opaque,{t2,0}}}]} =
-        run_test2(Config, Ts2, []),
     ok.
 
 %% OTP-11254. M:F/A could crash the linter.
-- 
2.35.3

openSUSE Build Service is sponsored by