Skip to content

Commit

Permalink
Bug fix: Unused declarations in catch blocks
Browse files Browse the repository at this point in the history
Fix for issue: #4508
  • Loading branch information
luc-blaeser committed Jun 5, 2024
1 parent c899462 commit 5e4fd8d
Show file tree
Hide file tree
Showing 50 changed files with 259 additions and 7 deletions.
19 changes: 12 additions & 7 deletions src/mo_frontend/typing.ml
Original file line number Diff line number Diff line change
Expand Up @@ -1509,13 +1509,13 @@ and infer_exp'' env exp : T.typ =
t
| SwitchE (exp1, cases) ->
let t1 = infer_exp_promote env exp1 in
let t = infer_cases env t1 T.Non cases in
let t = infer_cases env true t1 T.Non cases in
if not env.pre then
coverage_cases "switch" env cases t1 exp.at;
t
| TryE (exp1, cases) ->
let t1 = infer_exp env exp1 in
let t2 = infer_cases env T.catch T.Non cases in
let t2 = infer_cases env false T.catch T.Non cases in
if not env.pre then begin
check_ErrorCap env "try" exp.at;
coverage_cases "try handler" env cases T.catch exp.at
Expand Down Expand Up @@ -1975,15 +1975,17 @@ and infer_call env exp1 inst exp2 at t_expect_opt =

(* Cases *)

and infer_cases env t_pat t cases : T.typ =
List.fold_left (infer_case env t_pat) t cases
and infer_cases env check_unused t_pat t cases : T.typ =
List.fold_left (infer_case env check_unused t_pat) t cases

and infer_case env t_pat t case =
and infer_case env check_unused t_pat t case =
let {pat; exp} = case.it in
let ve = check_pat env t_pat pat in
let initial_usage = enter_scope env in
let t' = recover_with T.Non (infer_exp (adjoin_vals env ve)) exp in
leave_scope env ve initial_usage;
if check_unused then
leave_scope env ve initial_usage
else ();
let t'' = T.lub t t' in
if not env.pre && inconsistent t'' [t; t'] then
warn env case.at "M0101"
Expand All @@ -1998,8 +2000,11 @@ and check_cases env t_pat t cases =

and check_case env t_pat t case =
let {pat; exp} = case.it in
let initial_usage = enter_scope env in
let ve = check_pat env t_pat pat in
recover (check_exp (adjoin_vals env ve) t) exp
let t' = recover (check_exp (adjoin_vals env ve) t) exp in
leave_scope env ve initial_usage;
t'

and inconsistent t ts =
T.opaque t && not (List.exists T.opaque ts)
Expand Down
2 changes: 2 additions & 0 deletions test/fail/ok/actor-match.tc.ok
Original file line number Diff line number Diff line change
@@ -1,2 +1,4 @@
actor-match.mo:7.8-7.14: type error [M0114], object pattern cannot consume actor type
actor {f : shared () -> (); g : shared () -> ()}
actor-match.mo:7.9-7.10: warning [M0198], unused field f in object pattern (delete or rewrite as `f = _`)
actor-match.mo:7.12-7.13: warning [M0198], unused field g in object pattern (delete or rewrite as `g = _`)
2 changes: 2 additions & 0 deletions test/fail/ok/unused.tc.ok
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,7 @@ unused.mo:9.9-9.15: warning [M0194], unused identifier unused (delete or rename
unused.mo:11.6-11.7: warning [M0194], unused identifier g (delete or rename to wildcard `_` or `_g`)
unused.mo:11.8-11.9: warning [M0194], unused identifier x (delete or rename to wildcard `_` or `_x`)
unused.mo:15.5-15.8: warning [M0194], unused identifier hmm (delete or rename to wildcard `_` or `_hmm`)
unused.mo:23.10-23.11: warning [M0194], unused identifier u (delete or rename to wildcard `_` or `_u`)
unused.mo:24.8-24.9: warning [M0194], unused identifier o (delete or rename to wildcard `_` or `_o`)
unused.mo:32.5-32.6: warning [M0194], unused identifier r (delete or rename to wildcard `_` or `_r`)
unused.mo:32.29-32.30: warning [M0194], unused identifier f (delete or rename to wildcard `_` or `_f`)
5 changes: 5 additions & 0 deletions test/perf/ok/assetstorage.tc.ok
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
assetstorage/List.mo:66.19-66.20: warning [M0194], unused identifier t (delete or rename to wildcard `_` or `_t`)
assetstorage/List.mo:201.16-201.17: warning [M0194], unused identifier h (delete or rename to wildcard `_` or `_h`)
assetstorage/Iter.mo:165.29-165.31: warning [M0194], unused identifier ix (delete or rename to wildcard `_` or `_ix`)
assetstorage/RBTree.mo:45.10-45.13: warning [M0194], unused identifier res (delete or rename to wildcard `_` or `_res`)
assetstorage/RBTree.mo:50.10-50.13: warning [M0194], unused identifier res (delete or rename to wildcard `_` or `_res`)
assetstorage/RBTree.mo:179.15-179.16: warning [M0194], unused identifier c (delete or rename to wildcard `_` or `_c`)
assetstorage/Char.mo:8.15-8.22: warning [M0194], unused identifier toUpper (delete or rename to wildcard `_` or `_toUpper`)
assetstorage/Char.mo:11.15-11.22: warning [M0194], unused identifier toLower (delete or rename to wildcard `_` or `_toLower`)
assetstorage/Text.mo:347.22-347.25: warning [M0194], unused identifier cs1 (delete or rename to wildcard `_` or `_cs1`)
assetstorage/Text.mo:548.28-548.31: warning [M0194], unused identifier cs3 (delete or rename to wildcard `_` or `_cs3`)
4 changes: 4 additions & 0 deletions test/perf/ok/dao.tc.ok
Original file line number Diff line number Diff line change
@@ -1,4 +1,8 @@
assetstorage/List.mo:66.19-66.20: warning [M0194], unused identifier t (delete or rename to wildcard `_` or `_t`)
assetstorage/List.mo:201.16-201.17: warning [M0194], unused identifier h (delete or rename to wildcard `_` or `_h`)
assetstorage/Iter.mo:165.29-165.31: warning [M0194], unused identifier ix (delete or rename to wildcard `_` or `_ix`)
assetstorage/AssocList.mo:158.20-158.22: warning [M0194], unused identifier v2 (delete or rename to wildcard `_` or `_v2`)
assetstorage/AssocList.mo:313.20-313.22: warning [M0194], unused identifier v2 (delete or rename to wildcard `_` or `_v2`)
assetstorage/Trie.mo:206.31-206.32: warning [M0194], unused identifier v (delete or rename to wildcard `_` or `_v`)
assetstorage/Trie.mo:486.25-486.26: warning [M0194], unused identifier v (delete or rename to wildcard `_` or `_v`)
assetstorage/Trie.mo:588.9-588.15: warning [M0194], unused identifier key_eq (delete or rename to wildcard `_` or `_key_eq`)
Expand Down
4 changes: 4 additions & 0 deletions test/perf/ok/qr.tc.ok
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
qr/option.mo:52.8-52.11: warning [M0194], unused identifier map (delete or rename to wildcard `_` or `_map`)
qr/list.mo:124.21-124.22: warning [M0194], unused identifier t (delete or rename to wildcard `_` or `_t`)
qr/list.mo:281.18-281.19: warning [M0194], unused identifier h (delete or rename to wildcard `_` or `_h`)
qr/iter.mo:36.8-36.14: warning [M0194], unused identifier length (delete or rename to wildcard `_` or `_length`)
qr/assocList.mo:105.25-105.27: warning [M0194], unused identifier v2 (delete or rename to wildcard `_` or `_v2`)
qr/assocList.mo:179.25-179.27: warning [M0194], unused identifier v2 (delete or rename to wildcard `_` or `_v2`)
qr/trie.mo:515.9-515.15: warning [M0194], unused identifier key_eq (delete or rename to wildcard `_` or `_key_eq`)
qr/trie.mo:893.7-893.12: warning [M0194], unused identifier k3_eq (delete or rename to wildcard `_` or `_k3_eq`)
qr/trie.mo:1447.61-1447.66: warning [M0194], unused identifier k1_eq (delete or rename to wildcard `_` or `_k1_eq`)
Expand Down
2 changes: 2 additions & 0 deletions test/perf/ok/sha256.tc.ok
Original file line number Diff line number Diff line change
@@ -1 +1,3 @@
sha256/List.mo:67.22-67.23: warning [M0194], unused identifier t (delete or rename to wildcard `_` or `_t`)
sha256/List.mo:204.16-204.17: warning [M0194], unused identifier h (delete or rename to wildcard `_` or `_h`)
sha256/Iter.mo:194.29-194.31: warning [M0194], unused identifier ix (delete or rename to wildcard `_` or `_ix`)
4 changes: 4 additions & 0 deletions test/run-drun/ok/actor-class-mgmt-interp.tc.ok
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
actor-class-mgmt-interp.mo:37.15-37.16: warning [M0194], unused identifier e (delete or rename to wildcard `_` or `_e`)
actor-class-mgmt-interp.mo:46.15-46.16: warning [M0194], unused identifier e (delete or rename to wildcard `_` or `_e`)
actor-class-mgmt-interp.mo:54.15-54.16: warning [M0194], unused identifier e (delete or rename to wildcard `_` or `_e`)
actor-class-mgmt-interp.mo:63.13-63.14: warning [M0194], unused identifier e (delete or rename to wildcard `_` or `_e`)
1 change: 1 addition & 0 deletions test/run-drun/ok/composite-inspect-message.tc.ok
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
composite-inspect-message.mo:17.8-17.14: warning [M0194], unused identifier caller (delete or rename to wildcard `_` or `_caller`)
composite-inspect-message.mo:29.20-29.21: warning [M0194], unused identifier f (delete or rename to wildcard `_` or `_f`)
2 changes: 2 additions & 0 deletions test/run-drun/ok/error-codes.tc.ok
Original file line number Diff line number Diff line change
@@ -1 +1,3 @@
error-codes.mo:8.16-8.23: warning [M0194], unused identifier invalid (delete or rename to wildcard `_` or `_invalid`)
error-codes.mo:47.24-47.25: warning [M0194], unused identifier n (delete or rename to wildcard `_` or `_n`)
error-codes.mo:48.28-48.36: warning [M0194], unused identifier err_code (delete or rename to wildcard `_` or `_err_code`)
1 change: 1 addition & 0 deletions test/run-drun/ok/from_candid_trap.tc.ok
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from_candid_trap.mo:11.13-11.14: warning [M0194], unused identifier e (delete or rename to wildcard `_` or `_e`)
2 changes: 2 additions & 0 deletions test/run-drun/ok/gc-trigger-acl.tc.ok
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
gc-trigger-acl.mo:25.13-25.14: warning [M0194], unused identifier e (delete or rename to wildcard `_` or `_e`)
gc-trigger-acl.mo:38.13-38.14: warning [M0194], unused identifier e (delete or rename to wildcard `_` or `_e`)
1 change: 1 addition & 0 deletions test/run-drun/ok/idl-record.tc.ok
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
idl-record.mo:8.14-8.21: warning [M0194], unused identifier content (delete or rename to wildcard `_` or `_content`)
19 changes: 19 additions & 0 deletions test/run-drun/ok/idl-sub-ho-neg.tc.ok
Original file line number Diff line number Diff line change
Expand Up @@ -48,3 +48,22 @@ idl-sub-ho-neg.mo:103.28-103.29: warning [M0194], unused identifier n (delete or
idl-sub-ho-neg.mo:103.41-103.42: warning [M0194], unused identifier a (delete or rename to wildcard `_` or `_a`)
idl-sub-ho-neg.mo:103.56-103.57: warning [M0194], unused identifier r (delete or rename to wildcard `_` or `_r`)
idl-sub-ho-neg.mo:103.75-103.76: warning [M0194], unused identifier v (delete or rename to wildcard `_` or `_v`)
idl-sub-ho-neg.mo:131.15-131.16: warning [M0194], unused identifier e (delete or rename to wildcard `_` or `_e`)
idl-sub-ho-neg.mo:145.15-145.16: warning [M0194], unused identifier e (delete or rename to wildcard `_` or `_e`)
idl-sub-ho-neg.mo:159.15-159.16: warning [M0194], unused identifier e (delete or rename to wildcard `_` or `_e`)
idl-sub-ho-neg.mo:173.15-173.16: warning [M0194], unused identifier e (delete or rename to wildcard `_` or `_e`)
idl-sub-ho-neg.mo:187.15-187.16: warning [M0194], unused identifier e (delete or rename to wildcard `_` or `_e`)
idl-sub-ho-neg.mo:201.15-201.16: warning [M0194], unused identifier e (delete or rename to wildcard `_` or `_e`)
idl-sub-ho-neg.mo:215.15-215.16: warning [M0194], unused identifier e (delete or rename to wildcard `_` or `_e`)
idl-sub-ho-neg.mo:232.15-232.16: warning [M0194], unused identifier e (delete or rename to wildcard `_` or `_e`)
idl-sub-ho-neg.mo:248.15-248.16: warning [M0194], unused identifier e (delete or rename to wildcard `_` or `_e`)
idl-sub-ho-neg.mo:264.15-264.16: warning [M0194], unused identifier e (delete or rename to wildcard `_` or `_e`)
idl-sub-ho-neg.mo:279.15-279.16: warning [M0194], unused identifier e (delete or rename to wildcard `_` or `_e`)
idl-sub-ho-neg.mo:296.15-296.16: warning [M0194], unused identifier e (delete or rename to wildcard `_` or `_e`)
idl-sub-ho-neg.mo:313.15-313.16: warning [M0194], unused identifier e (delete or rename to wildcard `_` or `_e`)
idl-sub-ho-neg.mo:330.15-330.16: warning [M0194], unused identifier e (delete or rename to wildcard `_` or `_e`)
idl-sub-ho-neg.mo:346.15-346.16: warning [M0194], unused identifier e (delete or rename to wildcard `_` or `_e`)
idl-sub-ho-neg.mo:362.15-362.16: warning [M0194], unused identifier e (delete or rename to wildcard `_` or `_e`)
idl-sub-ho-neg.mo:377.15-377.16: warning [M0194], unused identifier e (delete or rename to wildcard `_` or `_e`)
idl-sub-ho-neg.mo:394.15-394.16: warning [M0194], unused identifier e (delete or rename to wildcard `_` or `_e`)
idl-sub-ho-neg.mo:411.15-411.16: warning [M0194], unused identifier e (delete or rename to wildcard `_` or `_e`)
11 changes: 11 additions & 0 deletions test/run-drun/ok/idl-sub-ho.tc.ok
Original file line number Diff line number Diff line change
Expand Up @@ -26,3 +26,14 @@ idl-sub-ho.mo:78.26-78.27: warning [M0194], unused identifier n (delete or renam
idl-sub-ho.mo:78.39-78.40: warning [M0194], unused identifier a (delete or rename to wildcard `_` or `_a`)
idl-sub-ho.mo:78.54-78.55: warning [M0194], unused identifier r (delete or rename to wildcard `_` or `_r`)
idl-sub-ho.mo:78.73-78.74: warning [M0194], unused identifier v (delete or rename to wildcard `_` or `_v`)
idl-sub-ho.mo:100.15-100.16: warning [M0194], unused identifier e (delete or rename to wildcard `_` or `_e`)
idl-sub-ho.mo:111.15-111.16: warning [M0194], unused identifier e (delete or rename to wildcard `_` or `_e`)
idl-sub-ho.mo:122.15-122.16: warning [M0194], unused identifier e (delete or rename to wildcard `_` or `_e`)
idl-sub-ho.mo:133.15-133.16: warning [M0194], unused identifier e (delete or rename to wildcard `_` or `_e`)
idl-sub-ho.mo:145.15-145.16: warning [M0194], unused identifier e (delete or rename to wildcard `_` or `_e`)
idl-sub-ho.mo:159.15-159.16: warning [M0194], unused identifier e (delete or rename to wildcard `_` or `_e`)
idl-sub-ho.mo:173.15-173.16: warning [M0194], unused identifier e (delete or rename to wildcard `_` or `_e`)
idl-sub-ho.mo:188.15-188.16: warning [M0194], unused identifier e (delete or rename to wildcard `_` or `_e`)
idl-sub-ho.mo:203.15-203.16: warning [M0194], unused identifier e (delete or rename to wildcard `_` or `_e`)
idl-sub-ho.mo:217.15-217.16: warning [M0194], unused identifier e (delete or rename to wildcard `_` or `_e`)
idl-sub-ho.mo:232.15-232.16: warning [M0194], unused identifier e (delete or rename to wildcard `_` or `_e`)
3 changes: 3 additions & 0 deletions test/run-drun/ok/idl-sub-opt-any-record.tc.ok
Original file line number Diff line number Diff line change
Expand Up @@ -5,3 +5,6 @@ idl-sub-opt-any-record.mo:15.24-15.25: warning [M0194], unused identifier a (del
idl-sub-opt-any-record.mo:15.33-15.34: warning [M0194], unused identifier n (delete or rename to wildcard `_` or `_n`)
idl-sub-opt-any-record.mo:16.24-16.25: warning [M0194], unused identifier a (delete or rename to wildcard `_` or `_a`)
idl-sub-opt-any-record.mo:16.33-16.34: warning [M0194], unused identifier n (delete or rename to wildcard `_` or `_n`)
idl-sub-opt-any-record.mo:31.15-31.16: warning [M0194], unused identifier e (delete or rename to wildcard `_` or `_e`)
idl-sub-opt-any-record.mo:46.15-46.16: warning [M0194], unused identifier e (delete or rename to wildcard `_` or `_e`)
idl-sub-opt-any-record.mo:60.15-60.16: warning [M0194], unused identifier e (delete or rename to wildcard `_` or `_e`)
5 changes: 5 additions & 0 deletions test/run-drun/ok/idl-sub-opt-any.tc.ok
Original file line number Diff line number Diff line change
Expand Up @@ -9,3 +9,8 @@ idl-sub-opt-any.mo:17.23-17.24: warning [M0194], unused identifier n (delete or
idl-sub-opt-any.mo:17.34-17.35: warning [M0194], unused identifier a (delete or rename to wildcard `_` or `_a`)
idl-sub-opt-any.mo:18.23-18.24: warning [M0194], unused identifier n (delete or rename to wildcard `_` or `_n`)
idl-sub-opt-any.mo:18.32-18.33: warning [M0194], unused identifier a (delete or rename to wildcard `_` or `_a`)
idl-sub-opt-any.mo:33.15-33.16: warning [M0194], unused identifier e (delete or rename to wildcard `_` or `_e`)
idl-sub-opt-any.mo:48.15-48.16: warning [M0194], unused identifier e (delete or rename to wildcard `_` or `_e`)
idl-sub-opt-any.mo:62.15-62.16: warning [M0194], unused identifier e (delete or rename to wildcard `_` or `_e`)
idl-sub-opt-any.mo:76.15-76.16: warning [M0194], unused identifier e (delete or rename to wildcard `_` or `_e`)
idl-sub-opt-any.mo:91.15-91.16: warning [M0194], unused identifier e (delete or rename to wildcard `_` or `_e`)
8 changes: 8 additions & 0 deletions test/run-drun/ok/idl-sub-rec.tc.ok
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,11 @@ idl-sub-rec.mo:54.5-54.6: warning [M0194], unused identifier a (delete or rename
idl-sub-rec.mo:60.5-60.6: warning [M0194], unused identifier f (delete or rename to wildcard `_` or `_f`)
idl-sub-rec.mo:66.5-66.6: warning [M0194], unused identifier a (delete or rename to wildcard `_` or `_a`)
idl-sub-rec.mo:72.5-72.6: warning [M0194], unused identifier a (delete or rename to wildcard `_` or `_a`)
idl-sub-rec.mo:91.13-91.14: warning [M0194], unused identifier e (delete or rename to wildcard `_` or `_e`)
idl-sub-rec.mo:104.13-104.14: warning [M0194], unused identifier e (delete or rename to wildcard `_` or `_e`)
idl-sub-rec.mo:118.13-118.14: warning [M0194], unused identifier e (delete or rename to wildcard `_` or `_e`)
idl-sub-rec.mo:131.13-131.14: warning [M0194], unused identifier e (delete or rename to wildcard `_` or `_e`)
idl-sub-rec.mo:144.13-144.14: warning [M0194], unused identifier e (delete or rename to wildcard `_` or `_e`)
idl-sub-rec.mo:169.13-169.14: warning [M0194], unused identifier e (delete or rename to wildcard `_` or `_e`)
idl-sub-rec.mo:181.13-181.14: warning [M0194], unused identifier e (delete or rename to wildcard `_` or `_e`)
idl-sub-rec.mo:194.13-194.14: warning [M0194], unused identifier e (delete or rename to wildcard `_` or `_e`)
1 change: 1 addition & 0 deletions test/run-drun/ok/inspect_message.tc.ok
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
inspect_message.mo:14.8-14.14: warning [M0194], unused identifier caller (delete or rename to wildcard `_` or `_caller`)
inspect_message.mo:26.20-26.21: warning [M0194], unused identifier f (delete or rename to wildcard `_` or `_f`)
2 changes: 2 additions & 0 deletions test/run-drun/ok/issue-3910.tc.ok
Original file line number Diff line number Diff line change
Expand Up @@ -10,3 +10,5 @@ issue-3910.mo:7.11-7.12: warning [M0194], unused identifier r (delete or rename
issue-3910.mo:12.13-12.17: warning [M0194], unused identifier trap (delete or rename to wildcard `_` or `_trap`)
issue-3910.mo:24.11-24.12: warning [M0194], unused identifier r (delete or rename to wildcard `_` or `_r`)
issue-3910.mo:29.13-29.17: warning [M0194], unused identifier trap (delete or rename to wildcard `_` or `_trap`)
issue-3910.mo:52.11-52.12: warning [M0194], unused identifier e (delete or rename to wildcard `_` or `_e`)
issue-3910.mo:67.11-67.12: warning [M0194], unused identifier e (delete or rename to wildcard `_` or `_e`)
3 changes: 3 additions & 0 deletions test/run-drun/ok/local-throw.tc.ok
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
local-throw.mo:14.19-14.22: warning [M0194], unused identifier sys (delete or rename to wildcard `_` or `_sys`)
local-throw.mo:32.17-32.20: warning [M0194], unused identifier sys (delete or rename to wildcard `_` or `_sys`)
local-throw.mo:45.14-45.17: warning [M0194], unused identifier sys (delete or rename to wildcard `_` or `_sys`)
Loading

0 comments on commit 5e4fd8d

Please sign in to comment.