Skip to content

Commit a58a40c

Browse files
authored
Purge and delete modules if after_verify/2 callback fails (#15220)
1 parent a24d3ff commit a58a40c

File tree

2 files changed

+9
-1
lines changed

2 files changed

+9
-1
lines changed

lib/elixir/src/elixir_module.erl

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -241,14 +241,20 @@ compile(Meta, Module, ModuleAsCharlist, Block, Vars, Prune, E) ->
241241
{module, Module, Binary, Result}
242242
catch
243243
error:undef:Stacktrace ->
244+
code:purge(Module),
245+
code:delete(Module),
244246
case Stacktrace of
245247
[{Module, Fun, Args, _Info} | _] = Stack when is_list(Args) ->
246248
compile_undef(Module, Fun, length(Args), Stack);
247249
[{Module, Fun, Arity, _Info} | _] = Stack ->
248250
compile_undef(Module, Fun, Arity, Stack);
249251
Stack ->
250252
erlang:raise(error, undef, Stack)
251-
end
253+
end;
254+
Kind:Reason:Stacktrace ->
255+
code:purge(Module),
256+
code:delete(Module),
257+
erlang:raise(Kind, Reason, Stacktrace)
252258
after
253259
put_compiler_modules(CompilerModules),
254260
ets:delete(DataSet),

lib/elixir/test/elixir/module_test.exs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,8 @@ defmodule ModuleTest do
9292
fn ->
9393
Module.create(ModuleTest.Raise, contents, __ENV__)
9494
end
95+
96+
refute Code.loaded?(ModuleTest.Raise)
9597
end
9698

9799
test "supports read access to module from __after_compile__/2" do

0 commit comments

Comments
 (0)