From 19eb3073561266f5e1699e9f4f9d52c65b42d76f Mon Sep 17 00:00:00 2001 From: Simeon Schaub Date: Sun, 27 Mar 2022 02:05:55 -0400 Subject: [PATCH] fix oc lowering with return type annotations (#44727) fixes #44723 Co-authored-by: Takafumi Arakaki --- src/julia-syntax.scm | 20 ++++++++++++-------- test/syntax.jl | 4 ++++ 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/src/julia-syntax.scm b/src/julia-syntax.scm index 10c204e1c50a6..9bb6622209ae2 100644 --- a/src/julia-syntax.scm +++ b/src/julia-syntax.scm @@ -4119,7 +4119,7 @@ f(x) = yt(x) (cons (car e) (map-cl-convert (cdr e) fname lam namemap defined toplevel interp opaq globals)))))))) -(define (closure-convert e) (cl-convert e #f #f #f #f #f #f #f)) +(define (closure-convert e) (cl-convert e #f #f (table) (table) #f #f #f)) ;; pass 5: convert to linear IR @@ -4219,17 +4219,21 @@ f(x) = yt(x) (loop (cdr s)))))) `(pop_exception ,restore-token)))) (define (emit-return x) - (define (actually-return x) - (let* ((x (if rett - (compile (convert-for-type-decl x rett) '() #t #f) - x)) - (tmp (if ((if (null? catch-token-stack) valid-ir-return? simple-atom?) x) + (define (emit- x) + (let* ((tmp (if ((if (null? catch-token-stack) valid-ir-return? simple-atom?) x) #f (make-ssavalue)))) - (if tmp (emit `(= ,tmp ,x))) + (if tmp + (begin (emit `(= ,tmp ,x)) tmp) + x))) + (define (actually-return x) + (let* ((x (if rett + (compile (convert-for-type-decl (emit- x) rett) '() #t #f) + x)) + (x (emit- x))) (let ((pexc (pop-exc-expr catch-token-stack '()))) (if pexc (emit pexc))) - (emit `(return ,(or tmp x))))) + (emit `(return ,x)))) (if x (if (> handler-level 0) (let ((tmp (cond ((and (simple-atom? x) (or (not (ssavalue? x)) (not finally-handler))) #f) diff --git a/test/syntax.jl b/test/syntax.jl index 99e371b09dd5a..8793a3de83bf8 100644 --- a/test/syntax.jl +++ b/test/syntax.jl @@ -3276,3 +3276,7 @@ end @test m.Foo.bar === 1 @test Core.get_binding_type(m.Foo, :bar) == Any end + +# issue 44723 +demo44723()::Any = Base.Experimental.@opaque () -> true ? 1 : 2 +@test demo44723()() == 1