Make absentError not depend on uniques
authorBartosz Nitka <niteria@gmail.com>
Thu, 12 May 2016 12:42:21 +0000 (05:42 -0700)
committerBartosz Nitka <niteria@gmail.com>
Mon, 25 Jul 2016 14:36:03 +0000 (07:36 -0700)
As explained in the comment it will cause changes in
inlining if we don't suppress them.

Test Plan: ./validate

Reviewers: bgamari, austin, simonpj, goldfire, simonmar

Reviewed By: simonmar

Subscribers: thomie

Differential Revision: https://phabricator.haskell.org/D2203

GHC Trac Issues: #4012

(cherry picked from commit 925b0aea8edc1761fcc16feba1601bea38422c92)

compiler/stranal/WwLib.hs

index 1472ead..09bc204 100644 (file)
@@ -757,7 +757,14 @@ mk_absent_let dflags arg
   where
     arg_ty  = idType arg
     abs_rhs = mkRuntimeErrorApp aBSENT_ERROR_ID arg_ty msg
-    msg     = showSDoc dflags (ppr arg <+> ppr (idType arg))
+    msg     = showSDoc (gopt_set dflags Opt_SuppressUniques)
+                       (ppr arg <+> ppr (idType arg))
+              -- We need to suppress uniques here because otherwise they'd
+              -- end up in the generated code as strings. This is bad for
+              -- determinism, because with different uniques the strings
+              -- will have different lengths and hence different costs for
+              -- the inliner leading to different inlining.
+              -- See also Note [Unique Determinism] in Unique
 
 mk_seq_case :: Id -> CoreExpr -> CoreExpr
 mk_seq_case arg body = Case (Var arg) (sanitiseCaseBndr arg) (exprType body) [(DEFAULT, [], body)]