GNU bug report logs -
#29226
fresh-auto-compile doesn’t invalidate the compilation cache
Previous Next
Full log
View this message in rfc822 format
[Message part 1 (text/plain, inline)]
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 29226 <at> debbugs.gnu.org.
--
29226: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=29226
GNU Bug Tracking System
Contact help-debbugs <at> gnu.org with problems
[Message part 2 (message/rfc822, inline)]
Andy Wingo <wingo <at> igalia.com> skribis:
> On Mon 15 Jan 2018 15:33, ludo <at> gnu.org (Ludovic Courtès) writes:
>
>> Hello,
>>
>> ludovic.courtes <at> inria.fr (Ludovic Courtès) skribis:
>>
>>> ‘%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.
>>
>>> Pushed as 83d4c4d622b406ec0bc9d8139ec8182fa72b5720.
>>
>> As we’ve discussed since then, this patch was misguided:
>> ‘%fresh-auto-compile’ is about ~/.cache, so the fact that .go files
>> found elsewhere in the search path get loaded is expected.
>>
>> My apologies for breaking this!
>>
>> So I guess we should revert 83d4c4d622b406ec0bc9d8139ec8182fa72b5720 and
>> release 2.2.4 afterwards. Does that make sense, Andy?
>
> Makes sense to me, yes!
OK, reverted in a1793bc904d947810d64175945218c2cdace38cc.
Thanks,
Ludo’.
[Message part 3 (message/rfc822, inline)]
[Message part 4 (text/plain, inline)]
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’.
[Message part 5 (text/x-patch, inline)]
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
This bug report was last modified 7 years and 128 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.