[project @ 2000-06-12 18:13:20 by panne]
authorpanne <unknown>
Mon, 12 Jun 2000 18:13:20 +0000 (18:13 +0000)
committerpanne <unknown>
Mon, 12 Jun 2000 18:13:20 +0000 (18:13 +0000)
`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?).

ghc/compiler/deSugar/DsForeign.lhs

index f6b7cb6..b0d3fb0 100644 (file)
@@ -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.