Hello! Ludovic Courtès <l...@gnu.org> skribis:
> $ cat /tmp/unbound.scm > (use-modules (srfi srfi-35)) > > (condition (&message (message "oh no!")) > (&serious)) > $ guild compile -Wunbound-variable /tmp/unbound.scm > /tmp/unbound.scm:3:0: warning: possibly unbound variable > `make-compound-condition' The problem was that ‘make-compound-condition’ is re-exported from (srfi srfi-35) and this particular case was not handled. The attached patch fixes it. Let me know what you think! Ludo’.
diff --git a/module/language/tree-il/analyze.scm b/module/language/tree-il/analyze.scm index 766568f38..4b53e426f 100644 --- a/module/language/tree-il/analyze.scm +++ b/module/language/tree-il/analyze.scm @@ -510,6 +510,11 @@ given `tree-il' element." ;; The variable is an import. At the time of use, the ;; name is bound to the import. 'import) + ((and=> (module-public-interface mod) + (lambda (interface) + (module-variable interface name))) + ;; The variable is re-exported from module. + 'import) (else ;; Variable unbound in the module. 'unbound)))))) diff --git a/test-suite/tests/tree-il.test b/test-suite/tests/tree-il.test index 217a1000f..262c2454d 100644 --- a/test-suite/tests/tree-il.test +++ b/test-suite/tests/tree-il.test @@ -557,6 +557,19 @@ #:env m #:opts %opts-w-unbound)))))))) + (pass-if "macro-inserted binding" + (null? (call-with-warnings + (lambda () + (compile '(begin + (use-modules (srfi srfi-35)) + + ;; This 'condition' form expands to a + ;; 'make-compound-condition' call, which is + ;; re-exported from (ice-9 exceptions). + (condition (&error) + (&message (message "oh!")))) + #:opts %opts-w-unbound))))) + (with-test-prefix "use-before-definition" (define-syntax-rule (pass-if-warnings expr pat test) (pass-if 'expr