Skip to content

Commit c064637

Browse files
committed
[fix-all 1] Fix failure when the result of all is unused
See test case
1 parent a4d5328 commit c064637

2 files changed

Lines changed: 20 additions & 16 deletions

File tree

glean/db/Glean/Query/Vars.hs

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import Data.IntSet (IntSet)
2929
import qualified Data.IntMap as IntMap
3030
import Data.IntMap (IntMap)
3131
import Data.List.NonEmpty (NonEmpty)
32+
import Data.Maybe
3233

3334
import Glean.Display
3435
import Glean.Query.Codegen.Types
@@ -185,29 +186,28 @@ reWildGenerator used gen = case gen of
185186
PrimCall op args ty ->
186187
PrimCall op (map (reWild used) args) ty
187188

188-
reWildStatement :: VarMap -> CgStatement -> CgStatement
189+
reWildStatement :: VarMap -> CgStatement -> Maybe CgStatement
189190
reWildStatement used (CgStatement lhs rhs) =
190-
CgStatement (reWild used lhs) (reWildGenerator used rhs)
191-
reWildStatement used s@(CgAllStatement (Var ty n x) expr stmts) =
191+
Just $ CgStatement (reWild used lhs) (reWildGenerator used rhs)
192+
reWildStatement used (CgAllStatement (Var ty n x) expr stmts) =
192193
case IntMap.lookup n used of
193-
Nothing -> error $
194-
"reWildStatement: var " <> show n <>
195-
" not in scope in " <> show (displayVerbose s) <>
196-
"\nVarMap: " <> show used
194+
Nothing ->
195+
-- the variable isn't used, so the statement has no effect
196+
Nothing
197197
Just new ->
198-
CgAllStatement
198+
Just $ CgAllStatement
199199
(Var ty new x) (reWild used expr)
200-
(map (reWildStatement used) stmts)
200+
(mapMaybe (reWildStatement used) stmts)
201201
reWildStatement used (CgNegation stmts) =
202-
CgNegation (map (reWildStatement used) stmts)
202+
Just $ CgNegation (mapMaybe (reWildStatement used) stmts)
203203
reWildStatement used (CgDisjunction stmtss) =
204-
CgDisjunction (map (map (reWildStatement used)) stmtss)
204+
Just $ CgDisjunction (map (mapMaybe (reWildStatement used)) stmtss)
205205
reWildStatement used (CgConditional cond then_ else_) =
206-
CgConditional
207-
(map (reWildStatement used) cond)
208-
(map (reWildStatement used) then_)
209-
(map (reWildStatement used) else_)
206+
Just $ CgConditional
207+
(mapMaybe (reWildStatement used) cond)
208+
(mapMaybe (reWildStatement used) then_)
209+
(mapMaybe (reWildStatement used) else_)
210210

211211
reWildQuery :: VarMap -> CgQuery -> CgQuery
212212
reWildQuery used (CgQuery head stmts) =
213-
CgQuery (reWild used head) (map (reWildStatement used) stmts)
213+
CgQuery (reWild used head) (mapMaybe (reWildStatement used) stmts)

glean/test/tests/Angle/SetTest.hs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,10 @@ setSemanticsTest dbTestCase = TestList
157157
[set] <- runQuery_ env repo $ angleData @(Set Glean.Test.Predicate)
158158
[s| all (glean.test.Predicate _) |]
159159
assertEqual "angle - set matching" 4 (size set)
160+
, TestLabel "unused all" $ dbTestCase $ \env repo -> do
161+
r <- runQuery_ env repo $ angleData @Nat
162+
[s| X where _ = all (X = 1); X = 0 |]
163+
assertEqual "unused all" r [Nat 0]
160164
]
161165

162166
setLimitTest :: Test

0 commit comments

Comments
 (0)