tomhrr / dale

Lisp-flavoured C
BSD 3-Clause "New" or "Revised" License
1.03k stars 48 forks source link

Bug after importing a function I don't even use #126

Closed porky11 closed 7 years ago

porky11 commented 7 years ago

I defined this function:

(def make-type-node
  (fn intern (p DNode) ((mc (p MContext)) (name (p DNode)) (T (p DNode)) (U (p DNode)))
    (let ((buf (array-of 250 char)))
      (sprintf buf "\"%s\"" (@:@ name token-str))
      (let ((string \ (std.macros.mnfv mc buf)))
        (qq do
          (as-macro
            (let ((typename (array-of 250 char)))
              (and (not (make-type-string mc (uq string) (q (uq T)) (q (uq U)) typename))
                   (return T))
              (def n (var auto (p DNode) (mnfv mc typename)))
              n)))))))

which depends on this macro:

(def as-macro (macro extern (rest)
  (let ((macro-name \ (make-gensym-var-node mc)))
    (qq do
      (def (uq macro-name) (macro intern (void)
        (uql (get-varargs-list mc (arg-count mc) rest))))
      ((uq macro-name))))))

The module containing this functions (module.dt) compiles correctly, but the file importing it generates these (main.dt) errors: libmodule-nomacros.so: undefined reference to _ZN3std6macros7copy$2dtoEPZ5DNodePZ5DNode' libmodule-nomacros.so: undefined reference to_ZN3std6macros4copyEPZ8MContextbPZ5DNode' libmodule-nomacros.so: undefined reference to _ZN3std6macros4mnfvEPZ8MContextPc' libmodule-nomacros.so: undefined reference toreport_2D_error'

tomhrr commented 7 years ago

On Sun, Sep 25, 2016 at 03:47:21AM -0700, Fabio Krapohl wrote:

The module containing this functions (module.dt) compiles correctly, but the file importing it generates these (main.dt) errors: libmodule-nomacros.so: undefined reference to _ZN3std6macros7copy$2dtoEPZ5DNodePZ5DNode' libmodule-nomacros.so: undefined reference to_ZN3std6macros4copyEPZ8MContextbPZ5DNode' libmodule-nomacros.so: undefined reference to _ZN3std6macros4mnfvEPZ8MContextPc' libmodule-nomacros.so: undefined reference toreport_2D_error'

Marking the function as compile-time only, via the 'cto' attribute, should fix this problem. See https://github.com/tomhrr/dale/blob/master/doc/1-7-macros.md#functions-used-by-macros for more details.