From 026d7e79766f7961a52d7757c93dcf686c755b49 Mon Sep 17 00:00:00 2001 From: sabiwara Date: Thu, 26 Mar 2026 08:47:12 +0900 Subject: [PATCH] Purge and delete modules if after_verify/2 callback fails --- lib/elixir/src/elixir_module.erl | 8 +++++++- lib/elixir/test/elixir/module_test.exs | 2 ++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/lib/elixir/src/elixir_module.erl b/lib/elixir/src/elixir_module.erl index 88166254eae..6466af5e12d 100644 --- a/lib/elixir/src/elixir_module.erl +++ b/lib/elixir/src/elixir_module.erl @@ -241,6 +241,8 @@ compile(Meta, Module, ModuleAsCharlist, Block, Vars, Prune, E) -> {module, Module, Binary, Result} catch error:undef:Stacktrace -> + code:purge(Module), + code:delete(Module), case Stacktrace of [{Module, Fun, Args, _Info} | _] = Stack when is_list(Args) -> compile_undef(Module, Fun, length(Args), Stack); @@ -248,7 +250,11 @@ compile(Meta, Module, ModuleAsCharlist, Block, Vars, Prune, E) -> compile_undef(Module, Fun, Arity, Stack); Stack -> erlang:raise(error, undef, Stack) - end + end; + Kind:Reason:Stacktrace -> + code:purge(Module), + code:delete(Module), + erlang:raise(Kind, Reason, Stacktrace) after put_compiler_modules(CompilerModules), ets:delete(DataSet), diff --git a/lib/elixir/test/elixir/module_test.exs b/lib/elixir/test/elixir/module_test.exs index a167086ad4b..485e64ab980 100644 --- a/lib/elixir/test/elixir/module_test.exs +++ b/lib/elixir/test/elixir/module_test.exs @@ -92,6 +92,8 @@ defmodule ModuleTest do fn -> Module.create(ModuleTest.Raise, contents, __ENV__) end + + refute Code.loaded?(ModuleTest.Raise) end test "supports read access to module from __after_compile__/2" do