(* File "test.ml", line 3, characters 6-7: shadowing binding 'a' from File "test.ml", line 2, characters 9-10 *) let test a = let a = b in a (* File "test.ml", line 9, characters 4-5: shadowing binding 'b' from File "test.ml", line 7, characters 4-5 *) let b = c and b = d let b = e (* File "test.ml", line 12, characters 4-8: shadowing binding 'test' from File "test.ml", line 2, characters 4-8 File "test.ml", line 16, characters 4-5: shadowing binding 'c' from File "test.ml", line 13, characters 9-10 *) let test c = match d with | e -> c | c -> e (* File "test.ml", line 19, characters 16-17: shadowing binding 'f' from File "test.ml", line 19, characters 8-9 *) let rec f = let f = () in f (* File "test.ml", line 23, characters 7-8: shadowing binding 'h' from File "test.ml", line 24, characters 4-5 *) let rec g = (let h = f in ()) and h = () (* no-warning tests, thanks to david allsopp *) let i ?(i = fun i -> i) x = x;; let j x = match x with (y, 1) -> () | (y, _) -> ()