Commit 59aaef6b authored by simonpj's avatar simonpj
Browse files

[project @ 2001-06-04 16:47:06 by simonpj]

----------------------------------
	Fix an existential-constructor bug
	----------------------------------

		MERGE INTO 5.00.2

This fixes a long-standing bug that made the strictness
analyser go into a loop if it met a recursive newtype:

	newtype Void = MkVoid Void
parent f9159272
......@@ -713,6 +713,10 @@ findRecDemand str_fn abs_fn ty
-- we don't exploit it yet, so don't bother
Just (tycon,_,data_con,cmpnt_tys) -- Single constructor case
| isRecursiveTyCon tycon -- Recursive data type; don't unpack
-> wwStrict -- (this applies to newtypes too:
-- e.g. data Void = MkVoid Void)
| isNewTyCon tycon -- A newtype!
-> ASSERT( null (tail cmpnt_tys) )
let
......@@ -721,7 +725,6 @@ findRecDemand str_fn abs_fn ty
wwUnpackNew demand
| null compt_strict_infos -- A nullary data type
|| isRecursiveTyCon tycon -- Recursive data type; don't unpack
-> wwStrict
| otherwise -- Some other data type
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment