aboutsummaryrefslogtreecommitdiffstats
path: root/lib/stdlib/src
diff options
context:
space:
mode:
authorAnthony Ramine <[email protected]>2013-07-22 21:41:31 +0200
committerFredrik Gustafsson <[email protected]>2013-08-27 16:15:21 +0200
commit9ce148b1059e4da746a11f1d80a653340216c468 (patch)
tree6b1e4e88e8ed5f6e955b164bc66904783064e0a2 /lib/stdlib/src
parentf846bf70b0c97ce66f29b0ff88a50316924bf34e (diff)
downloadotp-9ce148b1059e4da746a11f1d80a653340216c468.tar.gz
otp-9ce148b1059e4da746a11f1d80a653340216c468.tar.bz2
otp-9ce148b1059e4da746a11f1d80a653340216c468.zip
Fix unsafe variable tracking in try expressions
Variables used in the body of a try expression were marked as unsafe *and* used, which makes no sense as an unsafe variable can't be used. Function vtsubtract/2 is used to forget usage of such unsafe variables. Reported-by: Paul Davis
Diffstat (limited to 'lib/stdlib/src')
-rw-r--r--lib/stdlib/src/erl_lint.erl2
1 files changed, 1 insertions, 1 deletions
diff --git a/lib/stdlib/src/erl_lint.erl b/lib/stdlib/src/erl_lint.erl
index 9284f08b30..708ef44fed 100644
--- a/lib/stdlib/src/erl_lint.erl
+++ b/lib/stdlib/src/erl_lint.erl
@@ -2108,7 +2108,7 @@ expr({'try',Line,Es,Scs,Ccs,As}, Vt, St0) ->
{Evt0,St1} = exprs(Es, Vt, St0),
TryLine = {'try',Line},
Uvt = vtunsafe(vtnames(vtnew(Evt0, Vt)), TryLine, []),
- Evt1 = vtupdate(Uvt, Evt0),
+ Evt1 = vtupdate(Uvt, vtsubtract(Evt0, Uvt)),
{Sccs,St2} = icrt_clauses(Scs++Ccs, TryLine, vtupdate(Evt1, Vt), St1),
Rvt0 = Sccs,
Rvt1 = vtupdate(vtunsafe(vtnames(vtnew(Rvt0, Vt)), TryLine, []), Rvt0),