From cf8f806db788cc32ae7a00e28f0a7c99768b3b0f Mon Sep 17 00:00:00 2001 From: Asumu Takikawa Date: Fri, 21 Jun 2013 14:14:36 -0400 Subject: [PATCH] Fix internal error for vector type-checking If multiple values were expected and not provided when type-checking a vector expression, TR would throw an internal error. Thanks to Pierpaolo for the report! (cherry picked from commit 29bce22d0b8c27e2ebcc337586e02159ad4a4f42) --- .../typed-racket/fail/internal-vector-error.rkt | 13 +++++++++++++ .../typed-racket/typecheck/tc-app/tc-app-hetero.rkt | 2 +- 2 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 collects/tests/typed-racket/fail/internal-vector-error.rkt diff --git a/collects/tests/typed-racket/fail/internal-vector-error.rkt b/collects/tests/typed-racket/fail/internal-vector-error.rkt new file mode 100644 index 0000000000..2e27d22395 --- /dev/null +++ b/collects/tests/typed-racket/fail/internal-vector-error.rkt @@ -0,0 +1,13 @@ +#; +(exn:pred #rx"expected 2 values, but got 1") +#lang typed/racket + +;; This test ensures that the following snippet doesn't +;; result in an internal error. +;; +;; see +;; http://lists.racket-lang.org/dev/archive/2013-January/011614.html + +(: f (-> (Values String (Vector Integer Integer)))) +(define (f) (vector 1 2)) + diff --git a/collects/typed-racket/typecheck/tc-app/tc-app-hetero.rkt b/collects/typed-racket/typecheck/tc-app/tc-app-hetero.rkt index c320d156f5..6fcb437e9f 100644 --- a/collects/typed-racket/typecheck/tc-app/tc-app-hetero.rkt +++ b/collects/typed-racket/typecheck/tc-app/tc-app-hetero.rkt @@ -136,4 +136,4 @@ (ret (make-HeterogeneousVector (for/list ((e (in-syntax #'(args ...)))) (generalize (tc-expr/t e)))))] - [_ (int-err "bad expected: ~a" expected)]))) + [_ (ret Err)])))