Comments only: Trac #14511
authorSimon Peyton Jones <simonpj@microsoft.com>
Tue, 28 Nov 2017 16:02:18 +0000 (16:02 +0000)
committerSimon Peyton Jones <simonpj@microsoft.com>
Wed, 29 Nov 2017 17:05:44 +0000 (17:05 +0000)
compiler/simplCore/FloatIn.hs

index af3ad7f..6fae6b9 100644 (file)
@@ -415,6 +415,16 @@ But there are wrinkles
   cases like Trac #5658.   This is implemented in sepBindsByJoinPoint;
   if is_case is False we dump all floating cases right here.
 
+* Trac #14511 is another example of why we want to restrict float-in
+  of case-expressions.  Consider
+     case indexArray# a n of (# r #) -> writeArray# ma i (f r)
+  Now, floating that indexing operation into the (f r) thunk will
+  not create any new thunks, but it will keep the array 'a' alive
+  for much longer than the programmer expected.
+
+  So again, not floating a case into a let or argument seems like
+  the Right Thing
+
 For @Case@, the possible drop points for the 'to_drop'
 bindings are:
   (a) inside the scrutinee