From: panne Date: Mon, 12 Jun 2000 18:13:20 +0000 (+0000) Subject: [project @ 2000-06-12 18:13:20 by panne] X-Git-Tag: Approximately_9120_patches~4270 X-Git-Url: http://git.megacz.com/?a=commitdiff_plain;h=92a2a3c2b433813e79c9a59f3b44a931b758ae2c;p=ghc-hetmet.git [project @ 2000-06-12 18:13:20 by panne] `foreign label foo :: Addr' was simply mapped to `foo' on the C side, but this is wrong, resp. only works for C *functions*, not *variables* (praise the implicit conversions of C!). It now correctly maps to `(&foo)'. ATTENTION: I'm not sure if this fix breaks some SW which depends on the old (wrong) behaviour (H/Direct?). --- diff --git a/ghc/compiler/deSugar/DsForeign.lhs b/ghc/compiler/deSugar/DsForeign.lhs index f6b7cb6..b0d3fb0 100644 --- a/ghc/compiler/deSugar/DsForeign.lhs +++ b/ghc/compiler/deSugar/DsForeign.lhs @@ -171,8 +171,9 @@ Foreign labels dsFLabel :: Id -> ExtName -> DsM CoreBind dsFLabel nm ext_name = returnDs (NonRec nm fo_rhs) where - fo_rhs = mkConApp addrDataCon [mkLit (MachLitLit enm addrPrimTy)] + fo_rhs = mkConApp addrDataCon [mkLit (MachLitLit addr addrPrimTy)] enm = extNameStatic ext_name + addr = SLIT("(&") _APPEND_ enm _APPEND_ SLIT(")") \end{code} The function that does most of the work for `@foreign export@' declarations.