diff options
| author | hallgren <hallgren@chalmers.se> | 2015-03-02 14:27:36 +0000 |
|---|---|---|
| committer | hallgren <hallgren@chalmers.se> | 2015-03-02 14:27:36 +0000 |
| commit | 6480620e1dfd985a11b425e5a7eaddf467ec0967 (patch) | |
| tree | bb14dafe57efdc7a640dfb4d325390cca56a1ab1 /src/compiler/GF | |
| parent | 632aab83c3111d198f701de9e72878aa0ceb7015 (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".
Diffstat (limited to 'src/compiler/GF')
| -rw-r--r-- | src/compiler/GF/Compile/Optimize.hs | 1 |
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)) |
