From f0624637d86deadc998f7885fa097c2f1c9e9173 Mon Sep 17 00:00:00 2001
From: Kostis Sagonas <kostis@cs.ntua.gr>
Date: Mon, 10 May 2010 12:57:42 +0300
Subject: erl_lint: Issue warnings for undefined exported types

---
 lib/stdlib/src/erl_lint.erl | 15 ++++++++-------
 1 file changed, 8 insertions(+), 7 deletions(-)

diff --git a/lib/stdlib/src/erl_lint.erl b/lib/stdlib/src/erl_lint.erl
index 06e07523f9..6bbb52ebae 100644
--- a/lib/stdlib/src/erl_lint.erl
+++ b/lib/stdlib/src/erl_lint.erl
@@ -1121,11 +1121,12 @@ export(Line, Es, #lint{exports = Es0, called = Called} = St0) ->
     St1#lint{exports = Es1, called = C1}.
 
 -spec export_type(line(), [ta()], lint_state()) -> lint_state().
-%%  Mark types as exported, also as called from the export line.
+%%  Mark types as exported; also mark them as used from the export line.
 
-export_type(Line, ETs, #lint{exp_types = ETs0} = St0) ->
-    {ETs1,St1} =
-	foldl(fun (TA, {E,St2}) ->
+export_type(Line, ETs, #lint{usage = Usage, exp_types = ETs0} = St0) ->
+    UTs0 = Usage#usage.used_types,
+    {ETs1,UTs1,St1} =
+	foldl(fun (TA, {E,U,St2}) ->
 		      St = case gb_sets:is_element(TA, E) of
 			       true ->
 				   Warn = {duplicated_export_type,TA},
@@ -1133,10 +1134,10 @@ export_type(Line, ETs, #lint{exp_types = ETs0} = St0) ->
 			       false ->
 				   St2
 			   end,
-		      {gb_sets:add_element(TA, E), St}
+		      {gb_sets:add_element(TA, E), dict:store(TA, Line, U), St}
 	      end,
-	      {ETs0,St0}, ETs),
-    St1#lint{exp_types = ETs1}.
+	      {ETs0,UTs0,St0}, ETs),
+    St1#lint{usage = Usage#usage{used_types = UTs1}, exp_types = ETs1}.
 
 -type import() :: {module(), [fa()]} | module().
 -spec import(line(), import(), lint_state()) -> lint_state().
-- 
cgit v1.2.3