Skip to content

Commit c2e1ce3

Browse files
committed
Fix 1349
1 parent 688c26b commit c2e1ce3

File tree

2 files changed

+19
-2
lines changed

2 files changed

+19
-2
lines changed

src/fsharp/TastOps.fs

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5671,6 +5671,7 @@ let mkFolders (folders : _ ExprFolder) =
56715671
| Expr.Lambda(_lambdaId ,_ctorThisValOpt,_baseValOpt,_argvs,body,_m,_rty) -> exprF z body
56725672
| Expr.TyLambda(_lambdaId,_argtyvs,body,_m,_rty) -> exprF z body
56735673
| Expr.TyChoose(_,body,_) -> exprF z body
5674+
56745675
| Expr.App (f,_fty,_tys,argtys,_) ->
56755676
let z = exprF z f
56765677
let z = exprsF z argtys
@@ -5684,17 +5685,24 @@ let mkFolders (folders : _ ExprFolder) =
56845685
let z = exprF z body
56855686
z
56865687
| Expr.Link rX -> exprF z (!rX)
5688+
56875689
| Expr.Match (_spBind,_exprm,dtree,targets,_m,_ty) ->
56885690
let z = dtreeF z dtree
56895691
let z = Array.fold targetF z targets
56905692
z
5691-
| Expr.Quote(_e,{contents=Some(_typeDefs,_argTypes,argExprs,_)},_,_,_) -> exprsF z argExprs
5692-
| Expr.Quote(_e,{contents=None},_,_m,_) -> z
5693+
| Expr.Quote(e,{contents=Some(_typeDefs,_argTypes,argExprs,_)},_,_,_) ->
5694+
let z = exprF z e
5695+
exprsF z argExprs
5696+
5697+
| Expr.Quote(e,{contents=None},_,_m,_) ->
5698+
exprF z e
5699+
56935700
| Expr.Obj (_n,_typ,_basev,basecall,overrides,iimpls,_m) ->
56945701
let z = exprF z basecall
56955702
let z = List.fold tmethodF z overrides
56965703
let z = List.fold (foldOn snd (List.fold tmethodF)) z iimpls
56975704
z
5705+
56985706
| Expr.StaticOptimization (_tcs,csx,x,_) -> exprsF z [csx;x]
56995707

57005708
and valBindF dtree z bind =

tests/fsharp/core/quotes/test.fsx

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2718,6 +2718,15 @@ module ExtensionMembersWithSameName =
27182718
runAll()
27192719
#endif
27202720

2721+
module PartialApplicationLeadToInvalidCodeWhenOptimized =
2722+
let f () =
2723+
let x = 1
2724+
let g (y:int) (z:int) = <@ x @>
2725+
let _ = g 3 // the closure generated by this code was invalid
2726+
()
2727+
2728+
f ()
2729+
27212730
module TestAssemblyAttributes =
27222731
let attributes = System.Reflection.Assembly.GetExecutingAssembly().GetCustomAttributes(false)
27232732

0 commit comments

Comments
 (0)