Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • ghc/ghc
  • bgamari/ghc
  • syd/ghc
  • ggreif/ghc
  • watashi/ghc
  • RolandSenn/ghc
  • mpickering/ghc
  • DavidEichmann/ghc
  • carter/ghc
  • harpocrates/ghc
  • ethercrow/ghc
  • mijicd/ghc
  • adamse/ghc
  • alexbiehl/ghc
  • gridaphobe/ghc
  • trofi/ghc
  • supersven/ghc
  • ppk/ghc
  • ulysses4ever/ghc
  • AndreasK/ghc
  • ghuntley/ghc
  • shayne-fletcher-da/ghc
  • fgaz/ghc
  • yav/ghc
  • osa1/ghc
  • mbbx6spp/ghc
  • JulianLeviston/ghc
  • reactormonk/ghc
  • rae/ghc
  • takenobu-hs/ghc
  • michalt/ghc
  • andrewthad/ghc
  • hsyl20/ghc
  • scottgw/ghc
  • sjakobi/ghc
  • angerman/ghc
  • RyanGlScott/ghc
  • hvr/ghc
  • howtonotwin/ghc
  • chessai/ghc
  • m-renaud/ghc
  • brprice/ghc
  • stevehartdata/ghc
  • sighingnow/ghc
  • kgardas/ghc
  • ckoparkar/ghc
  • alp/ghc
  • smaeul/ghc
  • kakkun61/ghc
  • sykloid/ghc
  • newhoggy/ghc
  • toonn/ghc
  • nineonine/ghc
  • Phyx/ghc
  • ezyang/ghc
  • tweag/ghc
  • langston/ghc
  • ndmitchell/ghc
  • rockbmb/ghc
  • artempyanykh/ghc
  • mniip/ghc
  • mynguyenbmc/ghc
  • alexfmpe/ghc
  • crockeea/ghc
  • nh2/ghc
  • vaibhavsagar/ghc
  • phadej/ghc
  • Haskell-mouse/ghc
  • lolotp/ghc
  • spacekitteh/ghc
  • michaelpj/ghc
  • mgsloan/ghc
  • HPCohen/ghc
  • tmobile/ghc
  • radrow/ghc
  • simonmar/ghc
  • _deepfire/ghc
  • Ericson2314/ghc
  • leitao/ghc
  • fumieval/ghc
  • trac-isovector/ghc
  • cblp/ghc
  • xich/ghc
  • ciil/ghc
  • erthalion/ghc
  • xldenis/ghc
  • autotaker/ghc
  • haskell-wasm/ghc
  • kcsongor/ghc
  • agander/ghc
  • Baranowski/ghc
  • trac-dredozubov/ghc
  • 23Skidoo/ghc
  • iustin/ghc
  • ningning/ghc
  • josefs/ghc
  • kabuhr/ghc
  • gallais/ghc
  • dten/ghc
  • expipiplus1/ghc
  • Pluralia/ghc
  • rohanjr/ghc
  • intricate/ghc
  • kirelagin/ghc
  • Javran/ghc
  • DanielG/ghc
  • trac-mizunashi_mana/ghc
  • pparkkin/ghc
  • bollu/ghc
  • ntc2/ghc
  • jaspervdj/ghc
  • JoshMeredith/ghc
  • wz1000/ghc
  • zkourouma/ghc
  • code5hot/ghc
  • jdprice/ghc
  • tdammers/ghc
  • J-mie6/ghc
  • trac-lantti/ghc
  • ch1bo/ghc
  • cgohla/ghc
  • lucamolteni/ghc
  • acairncross/ghc
  • amerocu/ghc
  • chreekat/ghc
  • txsmith/ghc
  • trupill/ghc
  • typetetris/ghc
  • sergv/ghc
  • fryguybob/ghc
  • erikd/ghc
  • trac-roland/ghc
  • setupminimal/ghc
  • Friede80/ghc
  • SkyWriter/ghc
  • xplorld/ghc
  • abrar/ghc
  • obsidiansystems/ghc
  • Icelandjack/ghc
  • adinapoli/ghc
  • trac-matthewbauer/ghc
  • heatsink/ghc
  • dwijnand/ghc
  • Cmdv/ghc
  • alinab/ghc
  • pepeiborra/ghc
  • fommil/ghc
  • luochen1990/ghc
  • rlupton20/ghc
  • applePrincess/ghc
  • lehins/ghc
  • ronmrdechai/ghc
  • leeadam/ghc
  • harendra/ghc
  • mightymosquito1991/ghc
  • trac-gershomb/ghc
  • lucajulian/ghc
  • Rizary/ghc
  • VictorCMiraldo/ghc
  • jamesbrock/ghc
  • andrewdmeier/ghc
  • luke/ghc
  • pranaysashank/ghc
  • cocreature/ghc
  • hithroc/ghc
  • obreitwi/ghc
  • slrtbtfs/ghc
  • kaol/ghc
  • yairchu/ghc
  • Mathemagician98/ghc
  • trac-taylorfausak/ghc
  • leungbk/ghc
  • MichaWiedenmann/ghc
  • chris-martin/ghc
  • TDecki/ghc
  • adithyaov/ghc
  • trac-gelisam/ghc
  • Lysxia/ghc
  • complyue/ghc
  • bwignall/ghc
  • sternmull/ghc
  • sonika/ghc
  • leif/ghc
  • broadwaylamb/ghc
  • myszon/ghc
  • danbroooks/ghc
  • Mechachleopteryx/ghc
  • zardyh/ghc
  • trac-vdukhovni/ghc
  • OmarKhaledAbdo/ghc
  • arrowd/ghc
  • Bodigrim/ghc
  • matheus23/ghc
  • cardenaso11/ghc
  • trac-Athas/ghc
  • mb720/ghc
  • DylanZA/ghc
  • liff/ghc
  • typedrat/ghc
  • trac-claude/ghc
  • jbm/ghc
  • Gertjan423/ghc
  • PHO/ghc
  • JKTKops/ghc
  • kockahonza/ghc
  • msakai/ghc
  • Sir4ur0n/ghc
  • barambani/ghc
  • vishnu.c/ghc
  • dcoutts/ghc
  • trac-runeks/ghc
  • trac-MaxGabriel/ghc
  • lexi.lambda/ghc
  • strake/ghc
  • spavikevik/ghc
  • JakobBruenker/ghc
  • rmanne/ghc
  • gdziadkiewicz/ghc
  • ani/ghc
  • iliastsi/ghc
  • smunix/ghc
  • judah/ghc
  • blackgnezdo/ghc
  • emilypi/ghc
  • trac-bpfoley/ghc
  • muesli4/ghc
  • trac-gkaracha/ghc
  • Kleidukos/ghc
  • nek0/ghc
  • TristanCacqueray/ghc
  • dwulive/ghc
  • mbakke/ghc
  • arybczak/ghc
  • Yang123321/ghc
  • maksbotan/ghc
  • QuietMisdreavus/ghc
  • trac-olshanskydr/ghc
  • emekoi/ghc
  • samuela/ghc
  • josephcsible/ghc
  • dramforever/ghc
  • lpsmith/ghc
  • DenisFrezzato/ghc
  • michivi/ghc
  • jneira/ghc
  • jeffhappily/ghc
  • Ivan-Yudin/ghc
  • nakaji-dayo/ghc
  • gdevanla/ghc
  • galen/ghc
  • fendor/ghc
  • yaitskov/ghc
  • rcythr/ghc
  • awpr/ghc
  • jeremyschlatter/ghc
  • Aver1y/ghc
  • mitchellvitez/ghc
  • merijn/ghc
  • tomjaguarpaw1/ghc
  • trac-NoidedSuper/ghc
  • erewok/ghc
  • trac-junji.hashimoto/ghc
  • adamwespiser/ghc
  • bjaress/ghc
  • jhrcek/ghc
  • leonschoorl/ghc
  • lukasz-golebiewski/ghc
  • sheaf/ghc
  • last-g/ghc
  • carassius1014/ghc
  • eschwartz/ghc
  • dwincort/ghc
  • felixwiemuth/ghc
  • TimWSpence/ghc
  • marcusmonteirodesouza/ghc
  • WJWH/ghc
  • vtols/ghc
  • theobat/ghc
  • BinderDavid/ghc
  • ckoparkar0/ghc
  • alexander-kjeldaas/ghc
  • dme2/ghc
  • philderbeast/ghc
  • aaronallen8455/ghc
  • rayshih/ghc
  • benkard/ghc
  • mpardalos/ghc
  • saidelman/ghc
  • leiftw/ghc
  • ca333/ghc
  • bwroga/ghc
  • nmichael44/ghc
  • trac-crobbins/ghc
  • felixonmars/ghc
  • adityagupta1089/ghc
  • hgsipiere/ghc
  • treeowl/ghc
  • alexpeits/ghc
  • CraigFe/ghc
  • dnlkrgr/ghc
  • kerckhove_ts/ghc
  • cptwunderlich/ghc
  • eiais/ghc
  • hahohihu/ghc
  • sanchayan/ghc
  • lemmih/ghc
  • sehqlr/ghc
  • trac-dbeacham/ghc
  • luite/ghc
  • trac-f-a/ghc
  • vados/ghc
  • luntain/ghc
  • fatho/ghc
  • alexbiehl-gc/ghc
  • dcbdan/ghc
  • tvh/ghc
  • liam-ly/ghc
  • timbobbarnes/ghc
  • GovanifY/ghc
  • shanth2600/ghc
  • gliboc/ghc
  • duog/ghc
  • moxonsghost/ghc
  • zander/ghc
  • masaeedu/ghc
  • georgefst/ghc
  • guibou/ghc
  • nicuveo/ghc
  • mdebruijne/ghc
  • stjordanis/ghc
  • emiflake/ghc
  • wygulmage/ghc
  • frasertweedale/ghc
  • coot/ghc
  • aratamizuki/ghc
  • tsandstr/ghc
  • mrBliss/ghc
  • Anton-Latukha/ghc
  • tadfisher/ghc
  • vapourismo/ghc
  • Sorokin-Anton/ghc
  • basile-henry/ghc
  • trac-mightybyte/ghc
  • AbsoluteNikola/ghc
  • cobrien99/ghc
  • songzh/ghc
  • blamario/ghc
  • aj4ayushjain/ghc
  • trac-utdemir/ghc
  • tangcl/ghc
  • hdgarrood/ghc
  • maerwald/ghc
  • arjun/ghc
  • ratherforky/ghc
  • haskieLambda/ghc
  • EmilGedda/ghc
  • Bogicevic/ghc
  • eddiejessup/ghc
  • kozross/ghc
  • AlistairB/ghc
  • 3Rafal/ghc
  • christiaanb/ghc
  • trac-bit/ghc
  • matsumonkie/ghc
  • trac-parsonsmatt/ghc
  • chisui/ghc
  • jaro/ghc
  • trac-kmiyazato/ghc
  • davidsd/ghc
  • Tritlo/ghc
  • I-B-3/ghc
  • lykahb/ghc
  • AriFordsham/ghc
  • turion1/ghc
  • berberman/ghc
  • christiantakle/ghc
  • zyklotomic/ghc
  • trac-ocramz/ghc
  • CSEdd/ghc
  • doyougnu/ghc
  • mmhat/ghc
  • why-not-try-calmer/ghc
  • plutotulp/ghc
  • kjekac/ghc
  • Manvi07/ghc
  • teo/ghc
  • cactus/ghc
  • CarrieMY/ghc
  • abel/ghc
  • yihming/ghc
  • tsakki/ghc
  • jessicah/ghc
  • oliverbunting/ghc
  • meld/ghc
  • friedbrice/ghc
  • Joald/ghc
  • abarbu/ghc
  • DigitalBrains1/ghc
  • sterni/ghc
  • alexDarcy/ghc
  • hexchain/ghc
  • minimario/ghc
  • zliu41/ghc
  • tommd/ghc
  • jazcarate/ghc
  • peterbecich/ghc
  • alirezaghey/ghc
  • solomon/ghc
  • mikael.urankar/ghc
  • davjam/ghc
  • int-index/ghc
  • MorrowM/ghc
  • nrnrnr/ghc
  • Sonfamm/ghc-test-only
  • afzt1/ghc
  • nguyenhaibinh-tpc/ghc
  • trac-lierdakil/ghc
  • MichaWiedenmann1/ghc
  • jmorag/ghc
  • Ziharrk/ghc
  • trac-MitchellSalad/ghc
  • juampe/ghc
  • jwaldmann/ghc
  • snowleopard/ghc
  • juhp/ghc
  • normalcoder/ghc
  • ksqsf/ghc
  • trac-jberryman/ghc
  • roberth/ghc
  • 1ntEgr8/ghc
  • epworth/ghc
  • MrAdityaAlok/ghc
  • JunmingZhao42/ghc
  • jappeace/ghc
  • trac-Gabriel439/ghc
  • alt-romes/ghc
  • HugoPeters1024/ghc
  • 10ne1/ghc-fork
  • agentultra/ghc
  • Garfield1002/ghc
  • ChickenProp/ghc
  • clyring/ghc
  • MaxHearnden/ghc
  • jumper149/ghc
  • vem/ghc
  • ketzacoatl/ghc
  • Rosuavio/ghc
  • jackohughes/ghc
  • p4l1ly/ghc
  • konsumlamm/ghc
  • shlevy/ghc
  • torsten.schmits/ghc
  • andremarianiello/ghc
  • amesgen/ghc
  • googleson78/ghc
  • InfiniteVerma/ghc
  • uhbif19/ghc
  • yiyunliu/ghc
  • raehik/ghc
  • mrkun/ghc
  • telser/ghc
  • 1Jajen1/ghc
  • slotThe/ghc
  • WinstonHartnett/ghc
  • mpilgrem/ghc
  • dreamsmasher/ghc
  • schuelermine/ghc
  • trac-Viwor/ghc
  • undergroundquizscene/ghc
  • evertedsphere/ghc
  • coltenwebb/ghc
  • oberblastmeister/ghc
  • agrue/ghc
  • lf-/ghc
  • zacwood9/ghc
  • steshaw/ghc
  • high-cloud/ghc
  • SkamDart/ghc
  • PiDelport/ghc
  • maoif/ghc
  • RossPaterson/ghc
  • CharlesTaylor7/ghc
  • ribosomerocker/ghc
  • trac-ramirez7/ghc
  • daig/ghc
  • NicolasT/ghc
  • FinleyMcIlwaine/ghc
  • lawtonnichols/ghc
  • jmtd/ghc
  • ozkutuk/ghc
  • wildsebastian/ghc
  • lrzlin/ghc
  • tobias/ghc
  • fw/ghc
  • hawkinsw/ghc
  • type-dance/ghc
  • rui314/ghc
  • ocharles/ghc
  • wavewave/ghc
  • TheKK/ghc
  • nomeata/ghc
  • trac-csabahruska/ghc
  • jonathanjameswatson/ghc
  • L-as/ghc
  • Axman6/ghc
  • barracuda156/ghc
  • trac-jship/ghc
  • jake-87/ghc
  • meooow/ghc
  • rebeccat/ghc
  • hamana55/ghc
  • Enigmage/ghc
  • kokobd/ghc
  • agevelt/ghc
  • gshen42/ghc
  • chrismwendt/ghc
  • MangoIV/ghc
  • teto/ghc
  • Sookr1/ghc
  • trac-thomasjm/ghc
  • barci2/ghc-dev
  • trac-m4dc4p/ghc
  • dixonary/ghc
  • breakerzirconia/ghc
  • alexsio27444/ghc
  • glocq/ghc
  • sourabhxyz/ghc
  • ryantrinkle/ghc
  • Jade/ghc
  • scedfaliako/ghc
  • martijnbastiaan/ghc
  • trac-george.colpitts/ghc
  • ammarbinfaisal/ghc
  • mimi.vx/ghc
  • lortabac/ghc
  • trac-zyla/ghc
  • benbellick/ghc
  • aadaa-fgtaa/ghc
  • jvanbruegge/ghc
  • archbung/ghc
  • gilmi/ghc
  • mfonism/ghc
  • alex-mckenna/ghc
  • Ei30metry/ghc
  • DiegoDiverio/ghc
  • jorgecunhamendes/ghc
  • liesnikov/ghc
  • akrmn/ghc
  • trac-simplifierticks/ghc
  • jacco/ghc
  • rhendric/ghc
  • damhiya/ghc
  • ryndubei/ghc
  • DaveBarton/ghc
  • trac-Profpatsch/ghc
  • GZGavinZhao/ghc
  • ncfavier/ghc
  • jameshaydon/ghc
  • ajccosta/ghc
  • dschrempf/ghc
  • cydparser/ghc
  • LinuxUserGD/ghc
  • elodielander/ghc
  • facundominguez/ghc
  • psilospore/ghc
  • lachrimae/ghc
  • dylan-thinnes/ghc-type-errors-plugin
  • hamishmack/ghc
  • Leary/ghc
  • lzszt/ghc
  • lyokha/ghc
  • trac-glaubitz/ghc
  • Rewbert/ghc
  • andreabedini/ghc
  • Jasagredo/ghc
  • sol/ghc
  • OlegAlexander/ghc
  • trac-sthibaul/ghc
  • avdv/ghc
  • Wendaolee/ghc
  • ur4t/ghc
  • daylily/ghc
  • boltzmannrain/ghc
  • mmzk1526/ghc
  • trac-fizzixnerd/ghc
  • soulomoon/ghc
  • rwmjones/ghc
  • j14i/ghc
  • tracsis/ghc
  • gesh/ghc
  • flip101/ghc
  • eldritch-cookie/ghc
  • LemonjamesD/ghc
  • pgujjula/ghc
  • skeuchel/ghc
  • noteed/ghc
  • Torrekie/ghc
  • jlwoodwa/ghc
  • ayanamists/ghc
  • husong998/ghc
  • trac-edmundnoble/ghc
  • josephf/ghc
  • contrun/ghc
  • baulig/ghc
  • edsko/ghc
  • mzschr/ghc-issue-24732
  • ulidtko/ghc
  • Arsen/ghc
  • trac-sjoerd_visscher/ghc
  • crumbtoo/ghc
  • L0neGamer/ghc
  • DrewFenwick/ghc
  • benz0li/ghc
  • MaciejWas/ghc
  • jordanrule/ghc
  • trac-qqwy/ghc
  • LiamGoodacre/ghc
  • isomorpheme/ghc
  • trac-danidiaz/ghc
  • Kariim/ghc
  • taimoorzaeem/ghc
  • hololeap/ghc
  • ticat-fp/ghc
  • meritamen/ghc
  • criskell/ghc
  • trac-kraai/ghc
  • aergus/ghc
  • jdral/ghc
  • SamB/ghc
  • Tristian/ghc
  • ywgrit/ghc
  • KatsuPatrick/ghc
  • OsePedro/ghc
  • mpscholten/ghc
  • zaquest/ghc
  • fangyi-zhou/ghc
  • augyg/ghc
  • rkirkman/ghc
  • gulin.serge/ghc-windows-aarch64-bootstrap
  • iris/ghc
  • kwxm/ghc
  • maralorn/ghc
  • rafl/ghc
  • nikshalark/ghc
  • mrcjkb/ghc
  • blackheaven/ghc
  • laurenyim/ghc
  • bolt12/ghc
  • Xitian9/ghc
  • wenkokke/ghc
  • kephas/ghc
  • rmullanix/ghc
652 results
Show changes
Commits on Source (143)
Showing
with 181 additions and 131 deletions
...@@ -237,3 +237,5 @@ _darcs/ ...@@ -237,3 +237,5 @@ _darcs/
/extra-gcc-opts /extra-gcc-opts
.tm_properties
============================================================== =============================================================
The (Interactive) Glasgow Haskell Compiler -- version 6.10.1 The (Interactive) Glasgow Haskell Compiler -- version 7.4.1
============================================================== =============================================================
The GHC Team is pleased to announce a new major release of GHC. There The GHC Team is pleased to announce a new major release of GHC, 7.4.1.
have been a number of significant changes since the last major release,
including:
* Some new language features have been implemented: Here are some of the highlights of the 7.4 branch since 7.2 and 7.0:
* Record syntax: wild-card patterns, punning, and field disambiguation
* Generalised quasi-quotes
* Generalised list comprehensions
* View patterns
* Type families have been completely re-implemented * The Num class no longer has Eq or Show superclasses.
* Now comes with Haddock 2, which supports all GHC extensions * There is a new feature Safe Haskell (-XSafe, -XTrustworthy, -XUnsafe).
The design has changed since 7.2.
* Parallel garbage collection * There is a new feature kind polymorphism (-XPolyKinds).
A side-effect of this is that, when the extension is not enabled, in
certain circumstances kinds are now defaulted to * rather than being
inferred.
* Base provides extensible exceptions * There is a new feature constraint kinds (-XConstraintKinds).
* The GHC API is easier to use * It is now possible to give any sort of declaration at the ghci prompt.
For example, you can now declare datatypes within ghci.
* External core (output only) now works again * The profiling and hpc implementations have been merged and overhauled.
Visible changes include renaming of profiling flags, and a new
semantics for the cost-centre stacks (which should in most cases
result in more useful and intuitive profiles). The +RTS -xc flag now
also gives a stack trace.
* Data Parallel Haskell (DPH) comes as part of GHC * It is now possible to write compiler plugins.
The full release notes are here: * DPH support has been significantly improved.
http://haskell.org/ghc/docs/6.10.1/html/users_guide/release-6-10-1.html * There is now preliminary support for registerised compilation using
LLVM on the ARM platform.
Full release notes are here:
http://www.haskell.org/ghc/docs/7.4.1/html/users_guide/release-7-4-1.html
How to get it How to get it
~~~~~~~~~~~~~ ~~~~~~~~~~~~~
......
...@@ -50,12 +50,12 @@ For full information on building GHC, see the GHC Building Guide [3]. ...@@ -50,12 +50,12 @@ For full information on building GHC, see the GHC Building Guide [3].
Here follows a summary - if you get into trouble, the Building Guide Here follows a summary - if you get into trouble, the Building Guide
has all the answers. has all the answers.
NB. you need GHC installed in order to build GHC, because the compiler Before building GHC you may need to install some other tools and
is itself written in Haskell. For instructions on how to port GHC to a libraries. See "Setting up your system for building GHC" [8].
new platform, see the Building Guide.
If you're building from git sources (as opposed to a source NB. in particular you need GHC installed in order to build GHC,
distribution) then you also need to install Happy [4] and Alex [5]. because the compiler is itself written in Haskell. For instructions
on how to port GHC to a new platform, see the Building Guide [3].
For building library documentation, you'll need Haddock [6]. To build For building library documentation, you'll need Haddock [6]. To build
the compiler documentation, you need a good DocBook XML toolchain and the compiler documentation, you need a good DocBook XML toolchain and
...@@ -93,6 +93,7 @@ References ...@@ -93,6 +93,7 @@ References
[5] http://www.haskell.org/alex/ Alex [5] http://www.haskell.org/alex/ Alex
[6] http://www.haskell.org/haddock/ Haddock [6] http://www.haskell.org/haddock/ Haddock
[7] http://hackage.haskell.org/trac/ghc/wiki/Building/SyncAll [7] http://hackage.haskell.org/trac/ghc/wiki/Building/SyncAll
[8] http://hackage.haskell.org/trac/ghc/wiki/Building/Preparation
Contributors Contributors
......
...@@ -174,16 +174,7 @@ AC_DEFUN([FPTOOLS_SET_HASKELL_PLATFORM_VARS], ...@@ -174,16 +174,7 @@ AC_DEFUN([FPTOOLS_SET_HASKELL_PLATFORM_VARS],
GET_ARM_ISA() GET_ARM_ISA()
test -z "[$]2" || eval "[$]2=\"ArchARM {armISA = \$ARM_ISA, armISAExt = \$ARM_ISA_EXT}\"" test -z "[$]2" || eval "[$]2=\"ArchARM {armISA = \$ARM_ISA, armISAExt = \$ARM_ISA_EXT}\""
;; ;;
alpha) alpha|mips|mipseb|mipsel|hppa|hppa1_1|ia64|m68k|rs6000|s390|s390x|sparc64|vax)
test -z "[$]2" || eval "[$]2=ArchAlpha"
;;
mips|mipseb)
test -z "[$]2" || eval "[$]2=ArchMipseb"
;;
mipsel)
test -z "[$]2" || eval "[$]2=ArchMipsel"
;;
hppa|hppa1_1|ia64|m68k|rs6000|s390|s390x|sparc64|vax)
test -z "[$]2" || eval "[$]2=ArchUnknown" test -z "[$]2" || eval "[$]2=ArchUnknown"
;; ;;
*) *)
...@@ -221,13 +212,19 @@ AC_DEFUN([FPTOOLS_SET_HASKELL_PLATFORM_VARS], ...@@ -221,13 +212,19 @@ AC_DEFUN([FPTOOLS_SET_HASKELL_PLATFORM_VARS],
freebsd) freebsd)
test -z "[$]2" || eval "[$]2=OSFreeBSD" test -z "[$]2" || eval "[$]2=OSFreeBSD"
;; ;;
kfreebsdgnu)
test -z "[$]2" || eval "[$]2=OSKFreeBSD"
;;
openbsd) openbsd)
test -z "[$]2" || eval "[$]2=OSOpenBSD" test -z "[$]2" || eval "[$]2=OSOpenBSD"
;; ;;
netbsd) netbsd)
test -z "[$]2" || eval "[$]2=OSNetBSD" test -z "[$]2" || eval "[$]2=OSNetBSD"
;; ;;
dragonfly|osf1|osf3|hpux|linuxaout|kfreebsdgnu|freebsd2|cygwin32|gnu|nextstep2|nextstep3|sunos4|ultrix|irix|aix|haiku) haiku)
test -z "[$]2" || eval "[$]2=OSHaiku"
;;
dragonfly|osf1|osf3|hpux|linuxaout|freebsd2|cygwin32|gnu|nextstep2|nextstep3|sunos4|ultrix|irix|aix)
test -z "[$]2" || eval "[$]2=OSUnknown" test -z "[$]2" || eval "[$]2=OSUnknown"
;; ;;
*) *)
...@@ -355,6 +352,7 @@ AC_DEFUN([FP_SETTINGS], ...@@ -355,6 +352,7 @@ AC_DEFUN([FP_SETTINGS],
then then
SettingsCCompilerCommand='$topdir/../mingw/bin/gcc.exe' SettingsCCompilerCommand='$topdir/../mingw/bin/gcc.exe'
SettingsCCompilerFlags="$CONF_CC_OPTS_STAGE2 $CONF_GCC_LINKER_OPTS_STAGE2" SettingsCCompilerFlags="$CONF_CC_OPTS_STAGE2 $CONF_GCC_LINKER_OPTS_STAGE2"
SettingsArCommand='$topdir/../mingw/bin/ar.exe'
SettingsPerlCommand='$topdir/../perl/perl.exe' SettingsPerlCommand='$topdir/../perl/perl.exe'
SettingsDllWrapCommand='$topdir/../mingw/bin/dllwrap.exe' SettingsDllWrapCommand='$topdir/../mingw/bin/dllwrap.exe'
SettingsWindresCommand='$topdir/../mingw/bin/windres.exe' SettingsWindresCommand='$topdir/../mingw/bin/windres.exe'
...@@ -362,6 +360,7 @@ AC_DEFUN([FP_SETTINGS], ...@@ -362,6 +360,7 @@ AC_DEFUN([FP_SETTINGS],
else else
SettingsCCompilerCommand="$WhatGccIsCalled" SettingsCCompilerCommand="$WhatGccIsCalled"
SettingsCCompilerFlags="$CONF_CC_OPTS_STAGE2 $CONF_GCC_LINKER_OPTS_STAGE2" SettingsCCompilerFlags="$CONF_CC_OPTS_STAGE2 $CONF_GCC_LINKER_OPTS_STAGE2"
SettingsArCommand="$ArCmd"
SettingsPerlCommand="$PerlCmd" SettingsPerlCommand="$PerlCmd"
SettingsDllWrapCommand="/bin/false" SettingsDllWrapCommand="/bin/false"
SettingsWindresCommand="/bin/false" SettingsWindresCommand="/bin/false"
...@@ -369,6 +368,7 @@ AC_DEFUN([FP_SETTINGS], ...@@ -369,6 +368,7 @@ AC_DEFUN([FP_SETTINGS],
fi fi
AC_SUBST(SettingsCCompilerCommand) AC_SUBST(SettingsCCompilerCommand)
AC_SUBST(SettingsCCompilerFlags) AC_SUBST(SettingsCCompilerFlags)
AC_SUBST(SettingsArCommand)
AC_SUBST(SettingsPerlCommand) AC_SUBST(SettingsPerlCommand)
AC_SUBST(SettingsDllWrapCommand) AC_SUBST(SettingsDllWrapCommand)
AC_SUBST(SettingsWindresCommand) AC_SUBST(SettingsWindresCommand)
...@@ -1894,6 +1894,12 @@ AC_DEFUN([BOOTSTRAPPING_GHC_INFO_FIELD],[ ...@@ -1894,6 +1894,12 @@ AC_DEFUN([BOOTSTRAPPING_GHC_INFO_FIELD],[
if test $GhcCanonVersion -ge 701 if test $GhcCanonVersion -ge 701
then then
$1=`"$WithGhc" --info | grep "^ ,(\"$2\"," | sed -e 's/.*","//' -e 's/")$//'` $1=`"$WithGhc" --info | grep "^ ,(\"$2\"," | sed -e 's/.*","//' -e 's/")$//'`
tmp=${$1#\$topdir/}
if test "${$1}" != "$tmp"
then
topdir=`"$WithGhc" --print-libdir | sed 's#\\\\#/#g'`
$1="$topdir/$tmp"
fi
else else
$1=$3 $1=$3
fi fi
...@@ -1942,10 +1948,12 @@ AC_DEFUN([XCODE_VERSION],[ ...@@ -1942,10 +1948,12 @@ AC_DEFUN([XCODE_VERSION],[
# Finds where gcc is # Finds where gcc is
AC_DEFUN([FIND_GCC],[ AC_DEFUN([FIND_GCC],[
if test "$TargetOS_CPP" = "darwin" && if test "$TargetOS_CPP" = "darwin" &&
test "$XCodeVersion1" -ge 4 test "$XCodeVersion1" -eq 4 &&
test "$XCodeVersion2" -lt 2
then then
# From Xcode 4, use 'gcc-4.2' to force the use of the gcc legacy # In Xcode 4.1, 'gcc-4.2' is the gcc legacy backend (rather
# backend (instead of the LLVM backend) # than the LLVM backend). We prefer the legacy gcc, but in
# Xcode 4.2 'gcc-4.2' was removed.
FP_ARG_WITH_PATH_GNU_PROG([CC], [gcc-4.2]) FP_ARG_WITH_PATH_GNU_PROG([CC], [gcc-4.2])
else else
FP_ARG_WITH_PATH_GNU_PROG([CC], [gcc]) FP_ARG_WITH_PATH_GNU_PROG([CC], [gcc])
......
...@@ -55,7 +55,7 @@ module Name ( ...@@ -55,7 +55,7 @@ module Name (
nameOccName, nameModule, nameModule_maybe, nameOccName, nameModule, nameModule_maybe,
tidyNameOcc, tidyNameOcc,
hashName, localiseName, hashName, localiseName,
mkLocalisedOccName, mkLocalisedOccName,
nameSrcLoc, nameSrcSpan, pprNameDefnLoc, pprDefinedAt, nameSrcLoc, nameSrcSpan, pprNameDefnLoc, pprDefinedAt,
...@@ -430,6 +430,9 @@ instance Outputable Name where ...@@ -430,6 +430,9 @@ instance Outputable Name where
instance OutputableBndr Name where instance OutputableBndr Name where
pprBndr _ name = pprName name pprBndr _ name = pprName name
pprInfixOcc = pprInfixName
pprPrefixOcc = pprPrefixName
pprName :: Name -> SDoc pprName :: Name -> SDoc
pprName n@(Name {n_sort = sort, n_uniq = u, n_occ = occ}) pprName n@(Name {n_sort = sort, n_uniq = u, n_occ = occ})
......
...@@ -49,7 +49,8 @@ module RdrName ( ...@@ -49,7 +49,8 @@ module RdrName (
-- * Local mapping of 'RdrName' to 'Name.Name' -- * Local mapping of 'RdrName' to 'Name.Name'
LocalRdrEnv, emptyLocalRdrEnv, extendLocalRdrEnv, extendLocalRdrEnvList, LocalRdrEnv, emptyLocalRdrEnv, extendLocalRdrEnv, extendLocalRdrEnvList,
lookupLocalRdrEnv, lookupLocalRdrOcc, elemLocalRdrEnv, lookupLocalRdrEnv, lookupLocalRdrOcc, elemLocalRdrEnv, inLocalRdrEnvScope,
localRdrEnvElts, delLocalRdrEnvList,
-- * Global mapping of 'RdrName' to 'GlobalRdrElt's -- * Global mapping of 'RdrName' to 'GlobalRdrElt's
GlobalRdrEnv, emptyGlobalRdrEnv, mkGlobalRdrEnv, plusGlobalRdrEnv, GlobalRdrEnv, emptyGlobalRdrEnv, mkGlobalRdrEnv, plusGlobalRdrEnv,
...@@ -70,6 +71,7 @@ module RdrName ( ...@@ -70,6 +71,7 @@ module RdrName (
import Module import Module
import Name import Name
import NameSet
import Maybes import Maybes
import SrcLoc import SrcLoc
import FastString import FastString
...@@ -273,6 +275,9 @@ instance OutputableBndr RdrName where ...@@ -273,6 +275,9 @@ instance OutputableBndr RdrName where
| isTvOcc (rdrNameOcc n) = char '@' <+> ppr n | isTvOcc (rdrNameOcc n) = char '@' <+> ppr n
| otherwise = ppr n | otherwise = ppr n
pprInfixOcc rdr = pprInfixVar (isSymOcc (rdrNameOcc rdr)) (ppr rdr)
pprPrefixOcc rdr = pprPrefixVar (isSymOcc (rdrNameOcc rdr)) (ppr rdr)
showRdrName :: RdrName -> String showRdrName :: RdrName -> String
showRdrName r = showSDoc (ppr r) showRdrName r = showSDoc (ppr r)
...@@ -326,30 +331,42 @@ instance Ord RdrName where ...@@ -326,30 +331,42 @@ instance Ord RdrName where
\begin{code} \begin{code}
-- | This environment is used to store local bindings (@let@, @where@, lambda, @case@). -- | This environment is used to store local bindings (@let@, @where@, lambda, @case@).
-- It is keyed by OccName, because we never use it for qualified names -- It is keyed by OccName, because we never use it for qualified names
type LocalRdrEnv = OccEnv Name -- We keep the current mapping, *and* the set of all Names in scope
-- Reason: see Note [Splicing Exact Names] in RnEnv
type LocalRdrEnv = (OccEnv Name, NameSet)
emptyLocalRdrEnv :: LocalRdrEnv emptyLocalRdrEnv :: LocalRdrEnv
emptyLocalRdrEnv = emptyOccEnv emptyLocalRdrEnv = (emptyOccEnv, emptyNameSet)
extendLocalRdrEnv :: LocalRdrEnv -> Name -> LocalRdrEnv extendLocalRdrEnv :: LocalRdrEnv -> Name -> LocalRdrEnv
extendLocalRdrEnv env name extendLocalRdrEnv (env, ns) name
= extendOccEnv env (nameOccName name) name = (extendOccEnv env (nameOccName name) name, addOneToNameSet ns name)
extendLocalRdrEnvList :: LocalRdrEnv -> [Name] -> LocalRdrEnv extendLocalRdrEnvList :: LocalRdrEnv -> [Name] -> LocalRdrEnv
extendLocalRdrEnvList env names extendLocalRdrEnvList (env, ns) names
= extendOccEnvList env [(nameOccName n, n) | n <- names] = (extendOccEnvList env [(nameOccName n, n) | n <- names], addListToNameSet ns names)
lookupLocalRdrEnv :: LocalRdrEnv -> RdrName -> Maybe Name lookupLocalRdrEnv :: LocalRdrEnv -> RdrName -> Maybe Name
lookupLocalRdrEnv env (Unqual occ) = lookupOccEnv env occ lookupLocalRdrEnv (env, _) (Unqual occ) = lookupOccEnv env occ
lookupLocalRdrEnv _ _ = Nothing lookupLocalRdrEnv _ _ = Nothing
lookupLocalRdrOcc :: LocalRdrEnv -> OccName -> Maybe Name lookupLocalRdrOcc :: LocalRdrEnv -> OccName -> Maybe Name
lookupLocalRdrOcc env occ = lookupOccEnv env occ lookupLocalRdrOcc (env, _) occ = lookupOccEnv env occ
elemLocalRdrEnv :: RdrName -> LocalRdrEnv -> Bool elemLocalRdrEnv :: RdrName -> LocalRdrEnv -> Bool
elemLocalRdrEnv rdr_name env elemLocalRdrEnv rdr_name (env, _)
| isUnqual rdr_name = rdrNameOcc rdr_name `elemOccEnv` env | isUnqual rdr_name = rdrNameOcc rdr_name `elemOccEnv` env
| otherwise = False | otherwise = False
localRdrEnvElts :: LocalRdrEnv -> [Name]
localRdrEnvElts (env, _) = occEnvElts env
inLocalRdrEnvScope :: Name -> LocalRdrEnv -> Bool
-- This is the point of the NameSet
inLocalRdrEnvScope name (_, ns) = name `elemNameSet` ns
delLocalRdrEnvList :: LocalRdrEnv -> [OccName] -> LocalRdrEnv
delLocalRdrEnvList (env, ns) occs = (delListFromOccEnv env occs, ns)
\end{code} \end{code}
%************************************************************************ %************************************************************************
......
...@@ -757,12 +757,14 @@ isStrangeTypeReg (CmmLocal _) = False ...@@ -757,12 +757,14 @@ isStrangeTypeReg (CmmLocal _) = False
isStrangeTypeReg (CmmGlobal g) = isStrangeTypeGlobal g isStrangeTypeReg (CmmGlobal g) = isStrangeTypeGlobal g
isStrangeTypeGlobal :: GlobalReg -> Bool isStrangeTypeGlobal :: GlobalReg -> Bool
isStrangeTypeGlobal CCCS = True
isStrangeTypeGlobal CurrentTSO = True isStrangeTypeGlobal CurrentTSO = True
isStrangeTypeGlobal CurrentNursery = True isStrangeTypeGlobal CurrentNursery = True
isStrangeTypeGlobal BaseReg = True isStrangeTypeGlobal BaseReg = True
isStrangeTypeGlobal r = isFixedPtrGlobalReg r isStrangeTypeGlobal r = isFixedPtrGlobalReg r
strangeRegType :: CmmReg -> Maybe SDoc strangeRegType :: CmmReg -> Maybe SDoc
strangeRegType (CmmGlobal CCCS) = Just (ptext (sLit "struct CostCentreStack_ *"))
strangeRegType (CmmGlobal CurrentTSO) = Just (ptext (sLit "struct StgTSO_ *")) strangeRegType (CmmGlobal CurrentTSO) = Just (ptext (sLit "struct StgTSO_ *"))
strangeRegType (CmmGlobal CurrentNursery) = Just (ptext (sLit "struct bdescr_ *")) strangeRegType (CmmGlobal CurrentNursery) = Just (ptext (sLit "struct bdescr_ *"))
strangeRegType (CmmGlobal BaseReg) = Just (ptext (sLit "struct StgRegTable_ *")) strangeRegType (CmmGlobal BaseReg) = Just (ptext (sLit "struct StgRegTable_ *"))
...@@ -793,6 +795,7 @@ pprGlobalReg gr = case gr of ...@@ -793,6 +795,7 @@ pprGlobalReg gr = case gr of
SpLim -> ptext (sLit "SpLim") SpLim -> ptext (sLit "SpLim")
Hp -> ptext (sLit "Hp") Hp -> ptext (sLit "Hp")
HpLim -> ptext (sLit "HpLim") HpLim -> ptext (sLit "HpLim")
CCCS -> ptext (sLit "CCCS")
CurrentTSO -> ptext (sLit "CurrentTSO") CurrentTSO -> ptext (sLit "CurrentTSO")
CurrentNursery -> ptext (sLit "CurrentNursery") CurrentNursery -> ptext (sLit "CurrentNursery")
HpAlloc -> ptext (sLit "HpAlloc") HpAlloc -> ptext (sLit "HpAlloc")
......
...@@ -374,7 +374,7 @@ mkSlowEntryCode cl_info reg_args ...@@ -374,7 +374,7 @@ mkSlowEntryCode cl_info reg_args
stk_adj_pop = CmmAssign spReg (cmmRegOffW spReg final_stk_offset) stk_adj_pop = CmmAssign spReg (cmmRegOffW spReg final_stk_offset)
stk_adj_push = CmmAssign spReg (cmmRegOffW spReg (- final_stk_offset)) stk_adj_push = CmmAssign spReg (cmmRegOffW spReg (- final_stk_offset))
jump_to_entry = CmmJump (mkLblExpr (enterLocalIdLabel name has_caf_refs)) [] jump_to_entry = CmmJump (mkLblExpr (entryLabelFromCI cl_info)) []
\end{code} \end{code}
......
...@@ -271,7 +271,7 @@ nursery_bdescr_blocks = cmmOffset stgCurrentNursery oFFSET_bdescr_blocks ...@@ -271,7 +271,7 @@ nursery_bdescr_blocks = cmmOffset stgCurrentNursery oFFSET_bdescr_blocks
tso_stackobj, tso_CCCS, stack_STACK, stack_SP :: ByteOff tso_stackobj, tso_CCCS, stack_STACK, stack_SP :: ByteOff
tso_stackobj = closureField oFFSET_StgTSO_stackobj tso_stackobj = closureField oFFSET_StgTSO_stackobj
tso_CCCS = closureField oFFSET_StgTSO_CCCS tso_CCCS = closureField oFFSET_StgTSO_cccs
stack_STACK = closureField oFFSET_StgStack_stack stack_STACK = closureField oFFSET_StgStack_stack
stack_SP = closureField oFFSET_StgStack_sp stack_SP = closureField oFFSET_StgStack_sp
......
...@@ -178,8 +178,8 @@ emitCostCentreDecl cc = do ...@@ -178,8 +178,8 @@ emitCostCentreDecl cc = do
label, -- char *label, label, -- char *label,
modl, -- char *module, modl, -- char *module,
loc, -- char *srcloc, loc, -- char *srcloc,
zero64, -- StgWord64 mem_alloc
zero, -- StgWord time_ticks zero, -- StgWord time_ticks
zero64, -- StgWord64 mem_alloc
is_caf, -- StgInt is_caf is_caf, -- StgInt is_caf
zero -- struct _CostCentre *link zero -- struct _CostCentre *link
] ]
......
...@@ -963,7 +963,10 @@ infoTableLabelFromCI :: ClosureInfo -> CLabel ...@@ -963,7 +963,10 @@ infoTableLabelFromCI :: ClosureInfo -> CLabel
infoTableLabelFromCI = fst . labelsFromCI infoTableLabelFromCI = fst . labelsFromCI
entryLabelFromCI :: ClosureInfo -> CLabel entryLabelFromCI :: ClosureInfo -> CLabel
entryLabelFromCI = snd . labelsFromCI entryLabelFromCI ci
| tablesNextToCode = info_lbl
| otherwise = entry_lbl
where (info_lbl, entry_lbl) = labelsFromCI ci
labelsFromCI :: ClosureInfo -> (CLabel, CLabel) -- (Info, Entry) labelsFromCI :: ClosureInfo -> (CLabel, CLabel) -- (Info, Entry)
labelsFromCI cl@(ClosureInfo { closureName = name, labelsFromCI cl@(ClosureInfo { closureName = name,
......
...@@ -246,7 +246,7 @@ nursery_bdescr_blocks = cmmOffset stgCurrentNursery oFFSET_bdescr_blocks ...@@ -246,7 +246,7 @@ nursery_bdescr_blocks = cmmOffset stgCurrentNursery oFFSET_bdescr_blocks
tso_stackobj, tso_CCCS, stack_STACK, stack_SP :: ByteOff tso_stackobj, tso_CCCS, stack_STACK, stack_SP :: ByteOff
tso_stackobj = closureField oFFSET_StgTSO_stackobj tso_stackobj = closureField oFFSET_StgTSO_stackobj
tso_CCCS = closureField oFFSET_StgTSO_CCCS tso_CCCS = closureField oFFSET_StgTSO_cccs
stack_STACK = closureField oFFSET_StgStack_stack stack_STACK = closureField oFFSET_StgStack_stack
stack_SP = closureField oFFSET_StgStack_sp stack_SP = closureField oFFSET_StgStack_sp
......
...@@ -223,14 +223,14 @@ emitCostCentreDecl cc = do ...@@ -223,14 +223,14 @@ emitCostCentreDecl cc = do
-- All cost centres will be in the main package, since we -- All cost centres will be in the main package, since we
-- don't normally use -auto-all or add SCCs to other packages. -- don't normally use -auto-all or add SCCs to other packages.
-- Hence don't emit the package name in the module here. -- Hence don't emit the package name in the module here.
; let lits = [ zero, -- StgInt ccID, ; let lits = [ zero, -- StgInt ccID,
label, -- char *label, label, -- char *label,
modl, -- char *module, modl, -- char *module,
loc, -- char *srcloc, loc, -- char *srcloc,
zero, -- StgWord time_ticks zero64, -- StgWord64 mem_alloc
zero64, -- StgWord64 mem_alloc zero, -- StgWord time_ticks
is_caf, -- StgInt is_caf is_caf, -- StgInt is_caf
zero -- struct _CostCentre *link zero -- struct _CostCentre *link
] ]
; emitDataLits (mkCCLabel cc) lits ; emitDataLits (mkCCLabel cc) lits
} }
......
...@@ -700,29 +700,6 @@ lintTyBndrKind tv = ...@@ -700,29 +700,6 @@ lintTyBndrKind tv =
else lintKind ki -- type forall else lintKind ki -- type forall
------------------- -------------------
{-
lint_prim_eq_co :: TyCon -> OutCoercion -> [OutCoercion] -> LintM (OutType,OutType)
lint_prim_eq_co tc co arg_cos = case arg_cos of
[co1,co2] -> do { (t1,s1) <- lintCoercion co1
; (t2,s2) <- lintCoercion co2
; checkL (typeKind t1 `eqKind` typeKind t2) $
ptext (sLit "Mismatched arg kinds in coercion application:") <+> ppr co
; return (mkTyConApp tc [t1,t2], mkTyConApp tc [s1,s2]) }
_ -> failWithL (ptext (sLit "Unsaturated or oversaturated ~# coercion") <+> ppr co)
lint_eq_co :: TyCon -> OutCoercion -> [OutCoercion] -> LintM (OutType,OutType)
lint_eq_co tc co arg_cos = case arg_cos of
[co1,co2] -> do { (t1,s1) <- lintCoercion co1
; (t2,s2) <- lintCoercion co2
; checkL (typeKind t1 `eqKind` typeKind t2) $
ptext (sLit "Mismatched arg kinds in coercion application:") <+> ppr co
; return (mkTyConApp tc [t1,t2], mkTyConApp tc [s1,s2]) }
[co1] -> do { (t1,s1) <- lintCoercion co1
; return (mkTyConApp tc [t1], mkTyConApp tc [s1]) }
[] -> return (mkTyConApp tc [], mkTyConApp tc [])
_ -> failWithL (ptext (sLit "Oversaturated ~ coercion") <+> ppr co)
-}
lintKindCoercion :: OutCoercion -> LintM OutKind lintKindCoercion :: OutCoercion -> LintM OutKind
-- Kind coercions are only reflexivity because they mean kind -- Kind coercions are only reflexivity because they mean kind
-- instantiation. See Note [Kind coercions] in Coercion -- instantiation. See Note [Kind coercions] in Coercion
...@@ -742,21 +719,6 @@ lintCoercion (Refl ty) ...@@ -742,21 +719,6 @@ lintCoercion (Refl ty)
; return (ty, ty) } ; return (ty, ty) }
lintCoercion co@(TyConAppCo tc cos) lintCoercion co@(TyConAppCo tc cos)
{- DV: This grievous hack (from ghc-constraint-solver) should not be needed any more:
| tc `hasKey` eqPrimTyConKey -- Just as in lintType, treat applications of (~) and (~#)
= lint_prim_eq_co tc co cos -- specially to allow for polymorphism. This hack will
-- hopefully go away when we merge in kind polymorphism.
| tc `hasKey` eqTyConKey
= lint_eq_co tc co cos
| otherwise
= do { (ss,ts) <- mapAndUnzipM lintCoercion cos
; let kind_to_check = if (tc `hasKey` funTyConKey) && (length cos == 2)
then mkArrowKinds [argTypeKind,openTypeKind] liftedTypeKind
else tyConKind tc -- TODO: Fix this when kind polymorphism is in!
; check_co_app co kind_to_check ss
; return (mkTyConApp tc ss, mkTyConApp tc ts) }
-}
= do -- We use the kind of the type constructor to know how many = do -- We use the kind of the type constructor to know how many
-- kind coercions we have (one kind coercion for one kind -- kind coercions we have (one kind coercion for one kind
-- instantiation). -- instantiation).
...@@ -876,7 +838,10 @@ lintType ty@(FunTy t1 t2) ...@@ -876,7 +838,10 @@ lintType ty@(FunTy t1 t2)
= lint_ty_app ty (mkArrowKinds [argTypeKind, openTypeKind] liftedTypeKind) [t1,t2] = lint_ty_app ty (mkArrowKinds [argTypeKind, openTypeKind] liftedTypeKind) [t1,t2]
lintType ty@(TyConApp tc tys) lintType ty@(TyConApp tc tys)
| tyConHasKind tc | tyConHasKind tc -- Guards for SuperKindOon
, not (isUnLiftedTyCon tc) || tys `lengthIs` tyConArity tc
-- Check that primitive types are saturated
-- See Note [The kind invariant] in TypeRep
= lint_ty_app ty (tyConKind tc) tys = lint_ty_app ty (tyConKind tc) tys
| otherwise | otherwise
= failWithL (hang (ptext (sLit "Malformed type:")) 2 (ppr ty)) = failWithL (hang (ptext (sLit "Malformed type:")) 2 (ppr ty))
......
...@@ -26,7 +26,7 @@ import CoreFVs ...@@ -26,7 +26,7 @@ import CoreFVs
import CoreMonad ( endPass, CoreToDo(..) ) import CoreMonad ( endPass, CoreToDo(..) )
import CoreSyn import CoreSyn
import CoreSubst import CoreSubst
import MkCore import MkCore hiding( FloatBind(..) ) -- We use our own FloatBind here
import Type import Type
import Literal import Literal
import Coercion import Coercion
......
...@@ -26,6 +26,7 @@ module CoreSyn ( ...@@ -26,6 +26,7 @@ module CoreSyn (
mkIntLit, mkIntLitInt, mkIntLit, mkIntLitInt,
mkWordLit, mkWordLitWord, mkWordLit, mkWordLitWord,
mkWord64LitWord64, mkInt64LitInt64,
mkCharLit, mkStringLit, mkCharLit, mkStringLit,
mkFloatLit, mkFloatLitFloat, mkFloatLit, mkFloatLitFloat,
mkDoubleLit, mkDoubleLitDouble, mkDoubleLit, mkDoubleLitDouble,
...@@ -104,6 +105,7 @@ import Outputable ...@@ -104,6 +105,7 @@ import Outputable
import Util import Util
import Data.Data hiding (TyCon) import Data.Data hiding (TyCon)
import Data.Int
import Data.Word import Data.Word
infixl 4 `mkApps`, `mkTyApps`, `mkVarApps`, `App`, `mkCoApps` infixl 4 `mkApps`, `mkTyApps`, `mkVarApps`, `App`, `mkCoApps`
...@@ -992,6 +994,8 @@ instance Outputable b => Outputable (TaggedBndr b) where ...@@ -992,6 +994,8 @@ instance Outputable b => Outputable (TaggedBndr b) where
instance Outputable b => OutputableBndr (TaggedBndr b) where instance Outputable b => OutputableBndr (TaggedBndr b) where
pprBndr _ b = ppr b -- Simple pprBndr _ b = ppr b -- Simple
pprInfixOcc b = ppr b
pprPrefixOcc b = ppr b
\end{code} \end{code}
...@@ -1042,6 +1046,12 @@ mkWordLitWord :: Word -> Expr b ...@@ -1042,6 +1046,12 @@ mkWordLitWord :: Word -> Expr b
mkWordLit w = Lit (mkMachWord w) mkWordLit w = Lit (mkMachWord w)
mkWordLitWord w = Lit (mkMachWord (toInteger w)) mkWordLitWord w = Lit (mkMachWord (toInteger w))
mkWord64LitWord64 :: Word64 -> Expr b
mkWord64LitWord64 w = Lit (mkMachWord64 (toInteger w))
mkInt64LitInt64 :: Int64 -> Expr b
mkInt64LitInt64 w = Lit (mkMachInt64 (toInteger w))
-- | Create a machine character literal expression of type @Char#@. -- | Create a machine character literal expression of type @Char#@.
-- If you want an expression of type @Char@ use 'MkCore.mkCharExpr' -- If you want an expression of type @Char@ use 'MkCore.mkCharExpr'
mkCharLit :: Char -> Expr b mkCharLit :: Char -> Expr b
......
...@@ -21,7 +21,8 @@ module CoreUtils ( ...@@ -21,7 +21,8 @@ module CoreUtils (
exprType, coreAltType, coreAltsType, exprType, coreAltType, coreAltsType,
exprIsDupable, exprIsTrivial, getIdFromTrivialExpr, exprIsBottom, exprIsDupable, exprIsTrivial, getIdFromTrivialExpr, exprIsBottom,
exprIsCheap, exprIsExpandable, exprIsCheap', CheapAppFun, exprIsCheap, exprIsExpandable, exprIsCheap', CheapAppFun,
exprIsHNF, exprOkForSpeculation, exprIsBig, exprIsConLike, exprIsHNF, exprOkForSpeculation, exprOkForSideEffects,
exprIsBig, exprIsConLike,
rhsIsStatic, isCheapApp, isExpandableApp, rhsIsStatic, isCheapApp, isExpandableApp,
-- * Expression and bindings size -- * Expression and bindings size
...@@ -752,35 +753,39 @@ it's applied only to dictionaries. ...@@ -752,35 +753,39 @@ it's applied only to dictionaries.
-- --
-- We can only do this if the @y + 1@ is ok for speculation: it has no -- We can only do this if the @y + 1@ is ok for speculation: it has no
-- side effects, and can't diverge or raise an exception. -- side effects, and can't diverge or raise an exception.
exprOkForSpeculation :: Expr b -> Bool exprOkForSpeculation, exprOkForSideEffects :: Expr b -> Bool
exprOkForSpeculation = expr_ok primOpOkForSpeculation
exprOkForSideEffects = expr_ok primOpOkForSideEffects
-- Polymorphic in binder type -- Polymorphic in binder type
-- There is one call at a non-Id binder type, in SetLevels -- There is one call at a non-Id binder type, in SetLevels
exprOkForSpeculation (Lit _) = True
exprOkForSpeculation (Type _) = True expr_ok :: (PrimOp -> Bool) -> Expr b -> Bool
exprOkForSpeculation (Coercion _) = True expr_ok _ (Lit _) = True
exprOkForSpeculation (Var v) = appOkForSpeculation v [] expr_ok _ (Type _) = True
exprOkForSpeculation (Cast e _) = exprOkForSpeculation e expr_ok _ (Coercion _) = True
expr_ok primop_ok (Var v) = app_ok primop_ok v []
expr_ok primop_ok (Cast e _) = expr_ok primop_ok e
-- Tick annotations that *tick* cannot be speculated, because these -- Tick annotations that *tick* cannot be speculated, because these
-- are meant to identify whether or not (and how often) the particular -- are meant to identify whether or not (and how often) the particular
-- source expression was evaluated at runtime. -- source expression was evaluated at runtime.
exprOkForSpeculation (Tick tickish e) expr_ok primop_ok (Tick tickish e)
| tickishCounts tickish = False | tickishCounts tickish = False
| otherwise = exprOkForSpeculation e | otherwise = expr_ok primop_ok e
exprOkForSpeculation (Case e _ _ alts) expr_ok primop_ok (Case e _ _ alts)
= exprOkForSpeculation e -- Note [exprOkForSpeculation: case expressions] = expr_ok primop_ok e -- Note [exprOkForSpeculation: case expressions]
&& all (\(_,_,rhs) -> exprOkForSpeculation rhs) alts && all (\(_,_,rhs) -> expr_ok primop_ok rhs) alts
&& altsAreExhaustive alts -- Note [exprOkForSpeculation: exhaustive alts] && altsAreExhaustive alts -- Note [Exhaustive alts]
exprOkForSpeculation other_expr expr_ok primop_ok other_expr
= case collectArgs other_expr of = case collectArgs other_expr of
(Var f, args) -> appOkForSpeculation f args (Var f, args) -> app_ok primop_ok f args
_ -> False _ -> False
----------------------------- -----------------------------
appOkForSpeculation :: Id -> [Expr b] -> Bool app_ok :: (PrimOp -> Bool) -> Id -> [Expr b] -> Bool
appOkForSpeculation fun args app_ok primop_ok fun args
= case idDetails fun of = case idDetails fun of
DFunId new_type -> not new_type DFunId new_type -> not new_type
-- DFuns terminate, unless the dict is implemented -- DFuns terminate, unless the dict is implemented
...@@ -794,7 +799,7 @@ appOkForSpeculation fun args ...@@ -794,7 +799,7 @@ appOkForSpeculation fun args
PrimOpId op PrimOpId op
| isDivOp op -- Special case for dividing operations that fail | isDivOp op -- Special case for dividing operations that fail
, [arg1, Lit lit] <- args -- only if the divisor is zero , [arg1, Lit lit] <- args -- only if the divisor is zero
-> not (isZeroLit lit) && exprOkForSpeculation arg1 -> not (isZeroLit lit) && expr_ok primop_ok arg1
-- Often there is a literal divisor, and this -- Often there is a literal divisor, and this
-- can get rid of a thunk in an inner looop -- can get rid of a thunk in an inner looop
...@@ -802,14 +807,14 @@ appOkForSpeculation fun args ...@@ -802,14 +807,14 @@ appOkForSpeculation fun args
-> True -> True
| otherwise | otherwise
-> primOpOkForSpeculation op && -> primop_ok op -- A bit conservative: we don't really need
all exprOkForSpeculation args && all (expr_ok primop_ok) args
-- A bit conservative: we don't really need
-- to care about lazy arguments, but this is easy -- to care about lazy arguments, but this is easy
_other -> isUnLiftedType (idType fun) -- c.f. the Var case of exprIsHNF _other -> isUnLiftedType (idType fun) -- c.f. the Var case of exprIsHNF
|| idArity fun > n_val_args -- Partial apps || idArity fun > n_val_args -- Partial apps
|| (n_val_args ==0 && || (n_val_args == 0 &&
isEvaldUnfolding (idUnfolding fun)) -- Let-bound values isEvaldUnfolding (idUnfolding fun)) -- Let-bound values
where where
n_val_args = valArgCount args n_val_args = valArgCount args
...@@ -872,13 +877,13 @@ If exprOkForSpeculation doesn't look through case expressions, you get this: ...@@ -872,13 +877,13 @@ If exprOkForSpeculation doesn't look through case expressions, you get this:
The inner case is redundant, and should be nuked. The inner case is redundant, and should be nuked.
Note [exprOkForSpeculation: exhaustive alts] Note [Exhaustive alts]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~
We might have something like We might have something like
case x of { case x of {
A -> ... A -> ...
_ -> ...(case x of { B -> ...; C -> ... })... _ -> ...(case x of { B -> ...; C -> ... })...
Here, the inner case is fine, becuase the A alternative Here, the inner case is fine, because the A alternative
can't happen, but it's not ok to float the inner case outside can't happen, but it's not ok to float the inner case outside
the outer one (even if we know x is evaluated outside), because the outer one (even if we know x is evaluated outside), because
then it would be non-exhaustive. See Trac #5453. then it would be non-exhaustive. See Trac #5453.
......
...@@ -21,6 +21,9 @@ module MkCore ( ...@@ -21,6 +21,9 @@ module MkCore (
mkFloatExpr, mkDoubleExpr, mkFloatExpr, mkDoubleExpr,
mkCharExpr, mkStringExpr, mkStringExprFS, mkCharExpr, mkStringExpr, mkStringExprFS,
-- * Floats
FloatBind(..), wrapFloat,
-- * Constructing/deconstructing implicit parameter boxes -- * Constructing/deconstructing implicit parameter boxes
mkIPUnbox, mkIPBox, mkIPUnbox, mkIPBox,
...@@ -389,6 +392,25 @@ mkBigCoreTupTy :: [Type] -> Type ...@@ -389,6 +392,25 @@ mkBigCoreTupTy :: [Type] -> Type
mkBigCoreTupTy = mkChunkified mkBoxedTupleTy mkBigCoreTupTy = mkChunkified mkBoxedTupleTy
\end{code} \end{code}
%************************************************************************
%* *
Floats
%* *
%************************************************************************
\begin{code}
data FloatBind
= FloatLet CoreBind
| FloatCase CoreExpr Id AltCon [Var]
-- case e of y { C ys -> ... }
-- See Note [Floating cases] in SetLevels
wrapFloat :: FloatBind -> CoreExpr -> CoreExpr
wrapFloat (FloatLet defns) body = Let defns body
wrapFloat (FloatCase e b con bs) body = Case e b (exprType body) [(con, bs, body)]
\end{code}
%************************************************************************ %************************************************************************
%* * %* *
\subsection{Tuple destructors} \subsection{Tuple destructors}
......
...@@ -21,6 +21,7 @@ module PprCore ( ...@@ -21,6 +21,7 @@ module PprCore (
import CoreSyn import CoreSyn
import Literal( pprLiteral ) import Literal( pprLiteral )
import Name( pprInfixName, pprPrefixName )
import Var import Var
import Id import Id
import IdInfo import IdInfo
...@@ -268,6 +269,8 @@ and @pprCoreExpr@ functions. ...@@ -268,6 +269,8 @@ and @pprCoreExpr@ functions.
\begin{code} \begin{code}
instance OutputableBndr Var where instance OutputableBndr Var where
pprBndr = pprCoreBinder pprBndr = pprCoreBinder
pprInfixOcc = pprInfixName . varName
pprPrefixOcc = pprPrefixName . varName
pprCoreBinder :: BindingSite -> Var -> SDoc pprCoreBinder :: BindingSite -> Var -> SDoc
pprCoreBinder LetBind binder pprCoreBinder LetBind binder
......
...@@ -300,8 +300,8 @@ addExportFlagsAndRules target exports keep_alive rules prs ...@@ -300,8 +300,8 @@ addExportFlagsAndRules target exports keep_alive rules prs
-- isExternalName separates the user-defined top-level names from those -- isExternalName separates the user-defined top-level names from those
-- introduced by the type checker. -- introduced by the type checker.
is_exported :: Name -> Bool is_exported :: Name -> Bool
is_exported | target == HscInterpreted = isExternalName is_exported | targetRetainsAllBindings target = isExternalName
| otherwise = (`elemNameSet` exports) | otherwise = (`elemNameSet` exports)
\end{code} \end{code}
......