Skip to content

GitLab

  • Menu
Projects Groups Snippets
    • Loading...
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in / Register
  • ecl ecl
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 1
    • Issues 1
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 0
    • Merge requests 0
  • Deployments
    • Deployments
    • Releases
  • Monitor
    • Monitor
    • Incidents
  • Analytics
    • Analytics
    • Value stream
    • Repository
  • Wiki
    • Wiki
  • Activity
  • Graph
  • Create a new issue
  • Commits
  • Issue Boards
Collapse sidebar
  • ecl
  • eclecl
  • Issues
  • #1

Closed
Open
Created May 18, 2016 by Michael Raskin@mraskin

Invalid C code emitted for nested let/flet/flet

Compiling the following code:

(defun test-fun (arg form)
  (let* 
    ((m 'list))
    (labels
      ((f () (funcall m)))
      (labels 
        ( (g (&rest args)
             (if args (apply #'f arg args) (f))))
        (g form)))))

leads to aux_closure being used but undefined (and gcc returning an error).

(This is actually an expanded/simplified version of hu.dwim.walker code)

Merging two flet into a single labels or replacing (if args … with (if t … or replacing (funcall m) with (funcall 'list) doesn't create undefined variable reference in the emitted C code.

Assignee
Assign to
Time tracking