Don't tick top-level string literals
authorBen Gamari <bgamari.foss@gmail.com>
Thu, 2 Feb 2017 03:48:32 +0000 (22:48 -0500)
committerBen Gamari <ben@smart-cactus.org>
Thu, 2 Feb 2017 04:37:47 +0000 (23:37 -0500)
commitf5b275a239d2554c4da0b7621211642bf3b10650
treeca54df9dfc804f5007aba000fe35921c1d941dda
parent5cb5b7a505d3cf87b4bdac31acae2a650221d05f
Don't tick top-level string literals

This fixes a regression due to D2605 (see #8472) wherein top-level primitive
strings would fail to be noticed by CoreToStg as they were wrapped in a
tick. This resulted in a panic in CoreToStg due to inconsistent CAF information
(or a Core Lint failure, if enabled). Here we document the invariant that
unlifted expressions can only sit at top-level if of the form `Lit (MachStr
...)` with no ticks or other embellishments. Moreover, we fix instance of
this in `Simplify.prepareRhs` and `FloatOut.wrapTick` where this
invariant was being broken.

Test Plan: Validate with `-g`. Run testsuite with `WAY=ghci`.

Reviewers: austin, simonpj

Reviewed By: simonpj

Subscribers: simonpj, akio, scpmw, thomie

Differential Revision: https://phabricator.haskell.org/D3051
compiler/coreSyn/CoreSyn.hs
compiler/simplCore/FloatOut.hs
compiler/simplCore/Simplify.hs