I am working with gpc-20030507 (with gcc-3.2.3, i486-pc-mingw), and I have noted two changes in compiler behavior from gpc-20021128. I don't know whether these are bugs or intentionally revised features. 1. The "addr" function no longer observes the --no-typed-address command line switch. The GPC manual says: --no-typed-address Make the result of the address operator an untyped pointer (same as {$T-}). ...and: Addr returns the address of its argument. It is equivalent to the address operator.... ...so I would expect that "addr" and "@" would behave the same. They did under gpc-20021128. However, this now fails to compile with "--no-typed-address": program addrtest; var i : integer; a, b : ^ byte; begin a := @ i; { ok if --no-typed-address, fails otherwise } b := addr (i); { fails always, "incompatible pointer type" } end. 2. Using an interface-only module to declare routines in an exernal library no longer works. The importing program declares an external to "_init_<module-name>", but no entry point is provided by the module, so the program won't link. The GPC manual says: To use a function written in another language, you need to provide an external declaration for it - either in the program, or in the interface part of a unit, or an interface module. So I would think that the following would work: [ifmod.pas] module ifmod interface; export ifmod = (proc); procedure proc; end. [iftest.pas] program ifbug; import ifmod (proc); begin proc end. They both compile but fail during linking (presuming a library is supplied that declares "_Proc" as an entry point) with an undefined reference to "init_Ifmod". This worked in gpc-20021128 because "iftest.o" did not reference the "_init_Ifmod" entry point. -- Dave
participants (2)
-
Frank Heckenbach -
J. David Bryan