From e1f7955d4575a9b02a16e562e0bcd81dc1f85a0b Mon Sep 17 00:00:00 2001
From: Hans Bolinder <hasse@erlang.org>
Date: Thu, 15 Jun 2017 16:41:43 +0200
Subject: stdlib: Accept all nowarn_deprecated_function options

The check of bad nowarn_deprecated_function tags in -compile
attributes often made it impossible to compile modules with the
warnings_as_errors option in two consecutive releases.
---
 lib/stdlib/src/erl_lint.erl        | 11 +++------
 lib/stdlib/test/erl_lint_SUITE.erl | 49 +++++++++++++++++++++-----------------
 2 files changed, 30 insertions(+), 30 deletions(-)

(limited to 'lib')

diff --git a/lib/stdlib/src/erl_lint.erl b/lib/stdlib/src/erl_lint.erl
index fcfd0d8493..65ba343368 100644
--- a/lib/stdlib/src/erl_lint.erl
+++ b/lib/stdlib/src/erl_lint.erl
@@ -194,8 +194,6 @@ format_error({bad_nowarn_bif_clash,{F,A}}) ->
 format_error(disallowed_nowarn_bif_clash) ->
     io_lib:format("compile directive nowarn_bif_clash is no longer allowed,~n"
 		  " - use explicit module names or -compile({no_auto_import, [F/A]})", []);
-format_error({bad_nowarn_deprecated_function,{M,F,A}}) ->
-    io_lib:format("~tw:~tw/~w is not a deprecated function", [M,F,A]);
 format_error({bad_on_load,Term}) ->
     io_lib:format("badly formed on_load attribute: ~tw", [Term]);
 format_error(multiple_on_loads) ->
@@ -856,14 +854,11 @@ not_deprecated(Forms, St0) ->
                 {nowarn_deprecated_function, MFAs0} <- lists:flatten([Args]),
                 MFA <- lists:flatten([MFAs0])],
     Nowarn = [MFA || {MFA,_L} <- MFAsL],
-    Bad = [MFAL || {{M,F,A},_L}=MFAL <- MFAsL,
-                   otp_internal:obsolete(M, F, A) =:= no],
-    St1 = func_line_warning(bad_nowarn_deprecated_function, Bad, St0),
     ML = [{M,L} || {{M,_F,_A},L} <- MFAsL, is_atom(M)],
-    St3 = foldl(fun ({M,L}, St2) ->
+    St1 = foldl(fun ({M,L}, St2) ->
                         check_module_name(M, L, St2)
-                end, St1, ML),
-    St3#lint{not_deprecated = ordsets:from_list(Nowarn)}.
+                end, St0, ML),
+    St1#lint{not_deprecated = ordsets:from_list(Nowarn)}.
 
 %% The nowarn_bif_clash directive is not only deprecated, it's actually an error from R14A
 disallowed_compile_flags(Forms, St0) ->
diff --git a/lib/stdlib/test/erl_lint_SUITE.erl b/lib/stdlib/test/erl_lint_SUITE.erl
index 6a75eaa737..cb1cceb8db 100644
--- a/lib/stdlib/test/erl_lint_SUITE.erl
+++ b/lib/stdlib/test/erl_lint_SUITE.erl
@@ -66,7 +66,7 @@
          otp_11851/1,otp_11879/1,otp_13230/1,
          record_errors/1, otp_11879_cont/1,
          non_latin1_module/1, otp_14323/1,
-         get_stacktrace/1, otp_14285/1]).
+         get_stacktrace/1, otp_14285/1, otp_14378/1]).
 
 suite() ->
     [{ct_hooks,[ts_install_cth]},
@@ -87,7 +87,7 @@ all() ->
      maps, maps_type, maps_parallel_match,
      otp_11851, otp_11879, otp_13230,
      record_errors, otp_11879_cont, non_latin1_module, otp_14323,
-     get_stacktrace, otp_14285].
+     get_stacktrace, otp_14285, otp_14378].
 
 groups() -> 
     [{unused_vars_warn, [],
@@ -2054,12 +2054,10 @@ otp_5362(Config) when is_list(Config) ->
                   spawn(A).
            ">>,
            {[nowarn_unused_function]},
-           {error,[{3,erl_lint,disallowed_nowarn_bif_clash},
-		   {4,erl_lint,disallowed_nowarn_bif_clash},
-		   {4,erl_lint,{bad_nowarn_bif_clash,{spawn,2}}}],
-            [{5,erl_lint,{bad_nowarn_deprecated_function,{3,now,-1}}},
-             {5,erl_lint,{bad_nowarn_deprecated_function,{erlang,now,-1}}},
-             {5,erl_lint,{bad_nowarn_deprecated_function,{{a,b,c},now,-1}}}]}
+           {errors,[{3,erl_lint,disallowed_nowarn_bif_clash},
+                    {4,erl_lint,disallowed_nowarn_bif_clash},
+                    {4,erl_lint,{bad_nowarn_bif_clash,{spawn,2}}}],
+            []}
            },
 
           {otp_5362_8,
@@ -3937,10 +3935,6 @@ non_latin1_module(Config) ->
     UndefBehav = {undefined_behaviour,'кирилли́ческий атом'},
     "behaviour 'кирилли́ческий атом' undefined" =
         format_error(UndefBehav),
-    BadDepr = {bad_nowarn_deprecated_function,
-               {'кирилли́ческий атом','кирилли́ческий атом',18}},
-    "'кирилли́ческий атом':'кирилли́ческий атом'/18 is not a deprecated "
-    "function" = format_error(BadDepr),
     Ts = [{non_latin1_module,
            <<"
             %% Report uses of module names with non-Latin-1 characters.
@@ -3951,9 +3945,6 @@ non_latin1_module(Config) ->
 
             -callback 'кирилли́ческий атом':'кирилли́ческий атом'() -> a.
 
-            -compile([{nowarn_deprecated_function,
-                       [{'кирилли́ческий атом','кирилли́ческий атом',18}]}]).
-
             %% erl_lint:gexpr/3 is not extended to check module name here:
             t1() when 'кирилли́ческий атом':'кирилли́ческий атом'(1) ->
                 b.
@@ -3977,16 +3968,14 @@ non_latin1_module(Config) ->
              {6,erl_lint,non_latin1_module_unsupported},
              {8,erl_lint,non_latin1_module_unsupported},
              {8,erl_lint,BadCallback},
-             {10,erl_lint,non_latin1_module_unsupported},
-             {14,erl_lint,illegal_guard_expr},
-             {18,erl_lint,non_latin1_module_unsupported},
+             {11,erl_lint,illegal_guard_expr},
+             {15,erl_lint,non_latin1_module_unsupported},
+             {17,erl_lint,non_latin1_module_unsupported},
              {20,erl_lint,non_latin1_module_unsupported},
              {23,erl_lint,non_latin1_module_unsupported},
-             {26,erl_lint,non_latin1_module_unsupported},
-             {28,erl_lint,non_latin1_module_unsupported}],
+             {25,erl_lint,non_latin1_module_unsupported}],
             [{5,erl_lint,UndefBehav},
-             {6,erl_lint,UndefBehav},
-             {10,erl_lint,BadDepr}]}}],
+             {6,erl_lint,UndefBehav}]}}],
     run(Config, Ts),
     ok.
 
@@ -4000,6 +3989,22 @@ do_non_latin1_module(Mod) ->
     ok.
 
 
+otp_14378(Config) ->
+    Ts = [
+          {otp_14378_1,
+           <<"-export([t/0]).
+              -compile({nowarn_deprecated_function,{erlang,now,1}}).
+              t() ->
+                 erlang:now().">>,
+           [],
+           {warnings,[{4,erl_lint,
+                       {deprecated,{erlang,now,0},
+                        "Deprecated BIF. See the \"Time and Time Correction"
+                        " in Erlang\" chapter of the ERTS User's Guide"
+                        " for more information."}}]}}],
+    [] = run(Config, Ts),
+    ok.
+
 %% OTP-14323: Check the dialyzer attribute.
 otp_14323(Config) ->
     Ts = [
-- 
cgit v1.2.3