We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
I was able to reproduce this locally like so:
stack unpack loopbreaker-0.1.1.1 && cd loopbreaker-0.1.1.1 echo 'resolver: nightly-2019-11-20' > stack.yaml stack build --test --bench --no-run-benchmarks --fast
Here's the log output
DisableFlag plugin should respect disable flag InlineRecCalls plugin should explicitly break recursion in global bindings should explicitly break recursion in where bindings FAILED [1] should explicitly break recursion in let bindings FAILED [2] PragmaDetection plugin should respect INLINE pragma Failures: test/TestUtils.hs:14:56: 1) InlineRecCalls.plugin should explicitly break recursion in where bindings uncaught exception: ErrorCall test/InlineRecCallsSpec.hs:20:21: localRecursiveWhere === localMutual failed: LHS: localRecursiveWhere :: Int -> Int [LclIdX, Arity=1, Unf=Unf{Src=<vanilla>, TopLvl=True, Value=True, ConLike=True, WorkFree=True, Expandable=True, Guidance=IF_ARGS [] 30 60}] localRecursiveWhere = local @ Int $fEqInt $fNumInt lvl_saou :: Integer [LclId, Unf=Unf{Src=<vanilla>, TopLvl=True, Value=True, ConLike=True, WorkFree=True, Expandable=True, Guidance=IF_ARGS [] 100 0}] lvl_saou = 1 lvl_saos :: Integer [LclId, Unf=Unf{Src=<vanilla>, TopLvl=True, Value=True, ConLike=True, WorkFree=True, Expandable=True, Guidance=IF_ARGS [] 100 0}] lvl_saos = 0 local [InlPrag=INLINE (sat-args=1)] :: forall p. (Eq p, Num p) => p -> p [LclId, Arity=3, Str=<S(C(C(S))L),U(C(C1(U)),A)><L,U(A,C(C1(U)),C(C1(U)),A,A,A,C(U))><L,U>, Unf=Unf{Src=InlineStable, TopLvl=True, Value=True, ConLike=True, WorkFree=True, Expandable=True, Guidance=ALWAYS_IF(arity=3,unsat_ok=False,boring_ok=False) Tmpl= \ (@ p) ($dEq_a9Yo [Occ=OnceL] :: Eq p) ($dNum_a9Yp :: Num p) -> letrec { local [Occ=LoopBreaker] :: p -> p [LclId, Arity=1, Unf=Unf{Src=<vanilla>, TopLvl=False, Value=True, ConLike=True, WorkFree=True, Expandable=True, Guidance=IF_ARGS [0] 550 0}] local = \ (ds_dajc :: p) -> case == @ p $dEq_a9Yo ds_dajc (fromInteger @ p $dNum_a9Yp 0) of { False -> * @ p $dNum_a9Yp ds_dajc (local (- @ p $dNum_a9Yp ds_dajc (fromInteger @ p $dNum_a9Yp 1))); True -> fromInteger @ p $dNum_a9Yp 1 }; } in local}] local = \ (@ p) ($dEq_a9Yo [Dmd=<S(C(C(S))L),U(C(C1(U)),A)>] :: Eq p) ($dNum_a9Yp [Dmd=<L,U(A,C(C1(U)),C(C1(U)),A,A,A,C(U))>] :: Num p) (eta_B1 :: p) -> let { lvl_saoD :: p [LclId, Unf=Unf{Src=<vanilla>, TopLvl=False, Value=False, ConLike=False, WorkFree=False, Expandable=False, Guidance=IF_ARGS [] 30 0}] lvl_saoD = fromInteger @ p $dNum_a9Yp lvl_saou } in let { lvl_saoz :: p [LclId, Unf=Unf{Src=<vanilla>, TopLvl=False, Value=False, ConLike=False, WorkFree=False, Expandable=False, Guidance=IF_ARGS [] 30 0}] lvl_saoz = fromInteger @ p $dNum_a9Yp lvl_saos } in letrec { local [Occ=LoopBreaker] :: p -> p [LclId, Arity=1, Str=<L,U> {a9Yo-><S(C(C(S))L),U(C(C1(U)),A)>}, Unf=Unf{Src=<vanilla>, TopLvl=False, Value=True, ConLike=True, WorkFree=True, Expandable=True, Guidance=IF_ARGS [0] 160 0}] local = \ (ds_dajc :: p) -> case == @ p $dEq_a9Yo ds_dajc lvl_saoz of { False -> * @ p $dNum_a9Yp ds_dajc (local (- @ p $dNum_a9Yp ds_dajc lvl_saoD)); True -> lvl_saoD }; } in local eta_B1 RHS: localMutual [InlPrag=INLINE (sat-args=1)] :: Int -> Int [LclIdX, Arity=1, Str=<S(S),1*U(1*U)>, Unf=Unf{Src=InlineStable, TopLvl=True, Value=True, ConLike=True, WorkFree=True, Expandable=True, Guidance=ALWAYS_IF(arity=1,unsat_ok=False,boring_ok=True) Tmpl= local}] localMutual = local lvl_saol :: Int [LclId, Str=m, Unf=Unf{Src=<vanilla>, TopLvl=True, Value=True, ConLike=True, WorkFree=True, Expandable=True, Guidance=IF_ARGS [] 10 20}] lvl_saol = I# 1# $wlocal [InlPrag=NOUSERINLINE[2], Occ=LoopBreaker] :: Int# -> Int [LclId, Arity=1, Str=<S,1*U>, Unf=Unf{Src=<vanilla>, TopLvl=True, Value=True, ConLike=True, WorkFree=True, Expandable=True, Guidance=IF_ARGS [30] 150 0}] $wlocal = \ (ww_sar7 [Dmd=<S,1*U>] :: Int#) -> case ww_sar7 of ds_Xajd { __DEFAULT -> let { wild_Xo :: Int [LclId, Unf=Unf{Src=<vanilla>, TopLvl=False, Value=True, ConLike=True, WorkFree=True, Expandable=True, Guidance=IF_ARGS [] 10 20}] wild_Xo = I# ds_Xajd } in * @ Int $fNumInt wild_Xo (case - @ Int $fNumInt wild_Xo lvl_saol of { I# ww_Xash [Dmd=<S,1*U>] -> $wlocal ww_Xash }); 0# -> lvl_saol } local [InlPrag=NOUSERINLINE[2]] :: Int -> Int [LclId, Arity=1, Str=<S(S),1*U(1*U)>, Unf=Unf{Src=InlineStable, TopLvl=True, Value=True, ConLike=True, WorkFree=True, Expandable=True, Guidance=ALWAYS_IF(arity=1,unsat_ok=True,boring_ok=False) Tmpl= \ (w_sar4 [Occ=Once!] :: Int) -> case w_sar4 of { I# ww_sar7 [Occ=Once, Dmd=<S,U>] -> $wlocal ww_sar7 }}] local = \ (w_sar4 [Dmd=<S(S),1*U(1*U)>] :: Int) -> case w_sar4 of { I# ww_sar7 [Dmd=<S,1*U>] -> $wlocal ww_sar7 } CallStack (from HasCallStack): error, called at test/TestUtils.hs:14:56 in main:TestUtils To rerun use: --match "/InlineRecCalls/plugin/should explicitly break recursion in where bindings/" test/TestUtils.hs:14:56: 2) InlineRecCalls.plugin should explicitly break recursion in let bindings uncaught exception: ErrorCall test/InlineRecCallsSpec.hs:22:21: localRecursiveLet === localMutual failed: LHS: localRecursiveLet :: Int -> Int [LclIdX, Arity=1, Unf=Unf{Src=<vanilla>, TopLvl=True, Value=True, ConLike=True, WorkFree=True, Expandable=True, Guidance=IF_ARGS [] 30 60}] localRecursiveLet = local @ Int $fEqInt $fNumInt lvl_saou :: Integer [LclId, Unf=Unf{Src=<vanilla>, TopLvl=True, Value=True, ConLike=True, WorkFree=True, Expandable=True, Guidance=IF_ARGS [] 100 0}] lvl_saou = 1 lvl_saos :: Integer [LclId, Unf=Unf{Src=<vanilla>, TopLvl=True, Value=True, ConLike=True, WorkFree=True, Expandable=True, Guidance=IF_ARGS [] 100 0}] lvl_saos = 0 local [InlPrag=INLINE (sat-args=1)] :: forall p. (Eq p, Num p) => p -> p [LclId, Arity=3, Str=<S(C(C(S))L),U(C(C1(U)),A)><L,U(A,C(C1(U)),C(C1(U)),A,A,A,C(U))><L,U>, Unf=Unf{Src=InlineStable, TopLvl=True, Value=True, ConLike=True, WorkFree=True, Expandable=True, Guidance=ALWAYS_IF(arity=3,unsat_ok=False,boring_ok=False) Tmpl= \ (@ p) ($dEq_a9XA [Occ=OnceL] :: Eq p) ($dNum_a9XB :: Num p) -> letrec { local [Occ=LoopBreaker] :: p -> p [LclId, Arity=1, Unf=Unf{Src=<vanilla>, TopLvl=False, Value=True, ConLike=True, WorkFree=True, Expandable=True, Guidance=IF_ARGS [0] 550 0}] local = \ (ds_daj6 :: p) -> case == @ p $dEq_a9XA ds_daj6 (fromInteger @ p $dNum_a9XB 0) of { False -> * @ p $dNum_a9XB ds_daj6 (local (- @ p $dNum_a9XB ds_daj6 (fromInteger @ p $dNum_a9XB 1))); True -> fromInteger @ p $dNum_a9XB 1 }; } in local}] local = \ (@ p) ($dEq_a9XA [Dmd=<S(C(C(S))L),U(C(C1(U)),A)>] :: Eq p) ($dNum_a9XB [Dmd=<L,U(A,C(C1(U)),C(C1(U)),A,A,A,C(U))>] :: Num p) (eta_B1 :: p) -> let { lvl_saox :: p [LclId, Unf=Unf{Src=<vanilla>, TopLvl=False, Value=False, ConLike=False, WorkFree=False, Expandable=False, Guidance=IF_ARGS [] 30 0}] lvl_saox = fromInteger @ p $dNum_a9XB lvl_saou } in let { lvl_saot :: p [LclId, Unf=Unf{Src=<vanilla>, TopLvl=False, Value=False, ConLike=False, WorkFree=False, Expandable=False, Guidance=IF_ARGS [] 30 0}] lvl_saot = fromInteger @ p $dNum_a9XB lvl_saos } in letrec { local [Occ=LoopBreaker] :: p -> p [LclId, Arity=1, Str=<L,U> {a9XA-><S(C(C(S))L),U(C(C1(U)),A)>}, Unf=Unf{Src=<vanilla>, TopLvl=False, Value=True, ConLike=True, WorkFree=True, Expandable=True, Guidance=IF_ARGS [0] 160 0}] local = \ (ds_daj6 :: p) -> case == @ p $dEq_a9XA ds_daj6 lvl_saot of { False -> * @ p $dNum_a9XB ds_daj6 (local (- @ p $dNum_a9XB ds_daj6 lvl_saox)); True -> lvl_saox }; } in local eta_B1 RHS: localMutual [InlPrag=INLINE (sat-args=1)] :: Int -> Int [LclIdX, Arity=1, Str=<S(S),1*U(1*U)>, Unf=Unf{Src=InlineStable, TopLvl=True, Value=True, ConLike=True, WorkFree=True, Expandable=True, Guidance=ALWAYS_IF(arity=1,unsat_ok=False,boring_ok=True) Tmpl= local}] localMutual = local lvl_saol :: Int [LclId, Str=m, Unf=Unf{Src=<vanilla>, TopLvl=True, Value=True, ConLike=True, WorkFree=True, Expandable=True, Guidance=IF_ARGS [] 10 20}] lvl_saol = I# 1# $wlocal [InlPrag=NOUSERINLINE[2], Occ=LoopBreaker] :: Int# -> Int [LclId, Arity=1, Str=<S,1*U>, Unf=Unf{Src=<vanilla>, TopLvl=True, Value=True, ConLike=True, WorkFree=True, Expandable=True, Guidance=IF_ARGS [30] 150 0}] $wlocal = \ (ww_sar7 [Dmd=<S,1*U>] :: Int#) -> case ww_sar7 of ds_Xajd { __DEFAULT -> let { wild_Xo :: Int [LclId, Unf=Unf{Src=<vanilla>, TopLvl=False, Value=True, ConLike=True, WorkFree=True, Expandable=True, Guidance=IF_ARGS [] 10 20}] wild_Xo = I# ds_Xajd } in * @ Int $fNumInt wild_Xo (case - @ Int $fNumInt wild_Xo lvl_saol of { I# ww_Xash [Dmd=<S,1*U>] -> $wlocal ww_Xash }); 0# -> lvl_saol } local [InlPrag=NOUSERINLINE[2]] :: Int -> Int [LclId, Arity=1, Str=<S(S),1*U(1*U)>, Unf=Unf{Src=InlineStable, TopLvl=True, Value=True, ConLike=True, WorkFree=True, Expandable=True, Guidance=ALWAYS_IF(arity=1,unsat_ok=True,boring_ok=False) Tmpl= \ (w_sar4 [Occ=Once!] :: Int) -> case w_sar4 of { I# ww_sar7 [Occ=Once, Dmd=<S,U>] -> $wlocal ww_sar7 }}] local = \ (w_sar4 [Dmd=<S(S),1*U(1*U)>] :: Int) -> case w_sar4 of { I# ww_sar7 [Dmd=<S,1*U>] -> $wlocal ww_sar7 } CallStack (from HasCallStack): error, called at test/TestUtils.hs:14:56 in main:TestUtils To rerun use: --match "/InlineRecCalls/plugin/should explicitly break recursion in let bindings/" Randomized with seed 1398579975 Finished in 0.0139 seconds 5 examples, 2 failures
The text was updated successfully, but these errors were encountered:
No branches or pull requests
I was able to reproduce this locally like so:
Here's the log output
The text was updated successfully, but these errors were encountered: