From 2f4a9a73d57fdd48236ebaa9ce920ef434e878d2 Mon Sep 17 00:00:00 2001 From: Eric Dobson Date: Sat, 5 Jul 2014 16:33:36 -0700 Subject: [PATCH] Make tc/funapp follow contract in error case. Closes PR 14615. original commit: 13bc779e2106586b87d4110b7851584a129675b4 --- .../typed-racket-lib/typed-racket/typecheck/tc-funapp.rkt | 2 +- .../typed-racket-test/tests/typed-racket/fail/pr14615.rkt | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) create mode 100644 pkgs/typed-racket-pkgs/typed-racket-test/tests/typed-racket/fail/pr14615.rkt diff --git a/pkgs/typed-racket-pkgs/typed-racket-lib/typed-racket/typecheck/tc-funapp.rkt b/pkgs/typed-racket-pkgs/typed-racket-lib/typed-racket/typecheck/tc-funapp.rkt index b7f3cc8d..a9a71d14 100644 --- a/pkgs/typed-racket-pkgs/typed-racket-lib/typed-racket/typecheck/tc-funapp.rkt +++ b/pkgs/typed-racket-pkgs/typed-racket-lib/typed-racket/typecheck/tc-funapp.rkt @@ -160,7 +160,7 @@ (for/list ([fty ts]) (tc/funapp f-stx args-stx fty args-res expected)))] ;; error type is a perfectly good fcn type - [(Error:) f-type] + [(Error:) (ret f-type)] ;; otherwise fail [(Poly: ns (Function: arrs)) (tc-error/expr diff --git a/pkgs/typed-racket-pkgs/typed-racket-test/tests/typed-racket/fail/pr14615.rkt b/pkgs/typed-racket-pkgs/typed-racket-test/tests/typed-racket/fail/pr14615.rkt new file mode 100644 index 00000000..fb5e18d4 --- /dev/null +++ b/pkgs/typed-racket-pkgs/typed-racket-test/tests/typed-racket/fail/pr14615.rkt @@ -0,0 +1,6 @@ +#lang typed/racket/base +(require racket/gui) +(define (f) + (let ([fn (put-file)]) + (when fn + (values fn))))