[Pkg-haskell-maintainers] Bug#635113: Generated code fails to compile: uses bang patterns without corresponding {-# LANGUAGE BangPatterns #-} pragma

Josh Triplett josh at joshtriplett.org
Sat Jul 23 01:01:40 UTC 2011

On Sat, Jul 23, 2011 at 08:37:56AM +1000, Erik de Castro Lopo wrote:
> Josh Triplett wrote:
> > Package: alex
> > Version: 2.3.5-2
> > Severity: grave
> > 
> > The fix for bug 623067 makes alex -g use bang patterns, but doesn't add
> > the corresponding BangPatterns extension to the list of extensions in
> > the LANGUAGE pragma at the top of the file.  This makes the generated
> > code fail to compile:
> > 
> > dist/build/apters/apters-tmp/Scanner.hs:294:18:
> >     Illegal bang-pattern (use -XBangPatterns):
> >     ! (base)
> Any idea which file is it that is missing this pragma? I've just
> looked at the patch (which I generated) and it does add the pragma
> to alex-2.3.5/src/Scan.x.
>     --- alex-2.3.5.orig/src/Scan.x
>     +++ alex-2.3.5/src/Scan.x
>     @@ -11,7 +11,7 @@
>      -------------------------------------------------------------------------------
>      {
>     -{-# OPTIONS_GHC -w #-}
>     +{-# OPTIONS_GHC -w -XBangPatterns #-}
>      module Scan(lexer, AlexPosn(..), Token(..), Tkn(..), tokPosn) where
> I'm quite a regular user of alex and I'm surprised I haven't run
> into this yet.

That looks like Alex's own lexer, used to build Alex; adding
BangPatterns there seems like the wrong fix, and it *only* fixes Alex
itself, not other users of Alex.  Instead, Alex should automatically add
{-# LANGUAGE BangPatterns #-} to the generated lexer (or rather, extend
the existing LANGUAGE pragma to include BangPatterns) when it uses
BangPatterns (specifically, when using -g).  That would avoid forcing
the project that uses Alex to know that it needs BangPatterns

Projects using Cabal automatically invoke alex with -g when building
with GHC, so this change breaks any project using Cabal and Alex (or any
other project using -g).  A quick search turns up various build logs
(from Debian packages and otherwise) of lexers failing to build with
this error.

Also, I hope that the fixed version of this patch can go upstream to fix
other users of alex, since otherwise a project building on Debian and
using -Wall -Werror will fail to build when not using Debian alex.

- Josh Triplett

More information about the Pkg-haskell-maintainers mailing list