Skip to content
Snippets Groups Projects
Forked from cmucl / cmucl
Source project has a limited visibility.
  • rtoy's avatar
    c5c28c25
    From Helmut Eller: · c5c28c25
    rtoy authored
    the following enters an infinite recursion if it gets compiled two
    times:
    
    (def-alien-type nil (struct foo
    			    (f (* (function (values) (* (struct foo)))))))
    
    During the second compile, the existing type is compared with the to
    be defined type.  This enters a recursion because (struct foo) is
    recursive and the comparison is done again.  The current code has a
    "depth" counter and simply returns true if it exceeds 10.  But it only
    works for pointers to records and loops forever for function pointers.
    
    The patch below should fix this.  It keeps a hashtable of the already
    compared types and returns true if a pair is already in the hashtable.
    c5c28c25
    History
    From Helmut Eller:
    rtoy authored
    the following enters an infinite recursion if it gets compiled two
    times:
    
    (def-alien-type nil (struct foo
    			    (f (* (function (values) (* (struct foo)))))))
    
    During the second compile, the existing type is compared with the to
    be defined type.  This enters a recursion because (struct foo) is
    recursive and the comparison is done again.  The current code has a
    "depth" counter and simply returns true if it exceeds 10.  But it only
    works for pointers to records and loops forever for function pointers.
    
    The patch below should fix this.  It keeps a hashtable of the already
    compared types and returns true if a pair is already in the hashtable.