Subject: bug#29226: closed (Re: bug#29226: fresh-auto-compiledoesn’t invalidate the compilation cache)

From: [email-masked] (GNU bug Tracking System)
Date: Wed, 22 Nov 2017 15:49:02 +0000

Your bug report

#29226: fresh-auto-compile doesn’t invalidate the compilation cache

which was filed against the guile package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to [email-masked].

-- 
29226: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=29226
GNU Bug Tracking System
Contact [email-masked] with problems

Subject: Re: bug#29226: fresh-auto-compile doesn’tinvalidate the compilation cache
From: [email-masked] (Ludovic Courtès)
To: [email-masked]
Date: Wed, 22 Nov 2017 16:48:35 +0100
List-Id: <debbugs-submit.debbugs.gnu.org>

[email-masked] (Ludovic Courtès) skribis:

> I believe the attached patch fixes it.

Pushed as 83d4c4d622b406ec0bc9d8139ec8182fa72b5720.

Ludo’.

Subject: fresh-auto-compile doesn’t invalidate the compilation cache
From: [email-masked] (Ludovic Courtès)
To: [email-masked]
Date: Thu, 09 Nov 2017 13:53:22 +0100
List-Id: <debbugs-submit.debbugs.gnu.org>

Hello,

‘%fresh-auto-compile’ is documented as a way to “forcibly invalidate the
auto-compilation cache” (info "(guile) Compilation"), but it seems that
it doesn’t invalidate much.  Specifically, ‘primitive-load-path’ does:

  compiled_thunk = load_thunk_from_path (filename, full_filename, &stat_source,
                                         &found_stale_compiled_file);

  if (scm_is_false (compiled_thunk)
      && scm_is_false (*scm_loc_fresh_auto_compile)
      …)
    { … }

  …

  if (scm_is_true (compiled_thunk))
    return scm_call_0 (compiled_thunk);
  else
    {
      SCM freshly_compiled = scm_try_auto_compile (full_filename);
      …
    }

So if there’s a .go file in the search path, it is *always* loaded, and
there’s no way we reach ‘scm_try_auto_compile’.

‘load-absolute’ in boot-9.scm seems to have the same problem:

  (and scmstat (or (pre-compiled) (fallback)))

I believe the attached patch fixes it.

Thoughts?

Thanks,
Ludo’.

diff --git a/libguile/load.c b/libguile/load.c
index 7b8136af8..3747dd9ad 100644
--- a/libguile/load.c
+++ b/libguile/load.c
@@ -1,5 +1,5 @@
 /* Copyright (C) 1995, 1996, 1998, 1999, 2000, 2001, 2004, 2006, 2008,
- *   2009, 2010, 2011, 2012, 2013, 2014 Free Software Foundation, Inc.
+ *   2009, 2010, 2011, 2012, 2013, 2014, 2017 Free Software Foundation, Inc.
  * 
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public License
@@ -1195,13 +1195,16 @@ SCM_DEFINE (scm_primitive_load_path, "primitive-load-path", 0, 0, 1,
                                *scm_loc_load_extensions, SCM_BOOL_F,
                                &stat_source);
 
-  compiled_thunk = load_thunk_from_path (filename, full_filename, &stat_source,
-                                         &found_stale_compiled_file);
+  if (scm_is_false (*scm_loc_fresh_auto_compile))
+    compiled_thunk = load_thunk_from_path (filename, full_filename,
+					   &stat_source,
+					   &found_stale_compiled_file);
+  else
+    compiled_thunk = SCM_BOOL_F;
 
   if (scm_is_false (compiled_thunk)
       && scm_is_true (full_filename)
       && scm_is_true (*scm_loc_compile_fallback_path)
-      && scm_is_false (*scm_loc_fresh_auto_compile)
       && scm_is_pair (*scm_loc_load_compiled_extensions)
       && scm_is_string (scm_car (*scm_loc_load_compiled_extensions)))
     {
diff --git a/module/ice-9/boot-9.scm b/module/ice-9/boot-9.scm
index 7127d73f7..612040aa4 100644
--- a/module/ice-9/boot-9.scm
+++ b/module/ice-9/boot-9.scm
@@ -3812,7 +3812,10 @@ when none is available, reading FILE-NAME with READER."
                                               scmstat
                                               go-file-name))))))
 
-    (let ((compiled (and scmstat (or (pre-compiled) (fallback)))))
+    (let ((compiled (and scmstat
+                         (or (and (not %fresh-auto-compile)
+                                  (pre-compiled))
+                             (fallback)))))
       (if compiled
           (begin
             (if %load-hook