summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhallgren <hallgren@chalmers.se>2015-03-02 14:27:36 +0000
committerhallgren <hallgren@chalmers.se>2015-03-02 14:27:36 +0000
commit6480620e1dfd985a11b425e5a7eaddf467ec0967 (patch)
treebb14dafe57efdc7a640dfb4d325390cca56a1ab1
parent632aab83c3111d198f701de9e72878aa0ceb7015 (diff)
Fix to avoid "error (no reason given) OCCURRED IN optimizing <cat>"
GF.Compile.Optimize.mkLinReference can fail and cause this error because the helper function inside it applies msum to a list that might be empty (if there is a record type that does not contain a field of type Str). This means that it can return mzero::Err, i.e. Bad "error (no reason given)" which can slip through the top level test that only catches Bad "no string".
-rw-r--r--src/compiler/GF/Compile/Optimize.hs1
1 files changed, 1 insertions, 0 deletions
diff --git a/src/compiler/GF/Compile/Optimize.hs b/src/compiler/GF/Compile/Optimize.hs
index 28d0a7acb..4fec7e0b6 100644
--- a/src/compiler/GF/Compile/Optimize.hs
+++ b/src/compiler/GF/Compile/Optimize.hs
@@ -195,6 +195,7 @@ mkLinReference gr typ =
RecType [] -> Bad "no string"
RecType rs -> do
msum (map (\(l,ty) -> mkDefField ty (P trm l)) (sortRec rs))
+ `mplus` Bad "no string"
_ | Just _ <- isTypeInts typ -> Bad "no string"
_ -> Bad (render ("linearization type field cannot be" <+> typ))