Skip to content

Commit 28255c5

Browse files
authored
Merge pull request #21278 from JuliaLang/jb/fix20614
fix #20614, need error for `Vararg` on non-final argument
2 parents fc404ce + a01b8f2 commit 28255c5

File tree

2 files changed

+11
-0
lines changed

2 files changed

+11
-0
lines changed

src/method.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -668,6 +668,12 @@ JL_DLLEXPORT void jl_method_def(jl_svec_t *argdata,
668668
jl_symbol_name(m->file),
669669
m->line);
670670
}
671+
if (jl_is_vararg_type(elt) && i < na-1)
672+
jl_exceptionf(jl_argumenterror_type,
673+
"Vararg on non-final argument in method definition for %s at %s:%d",
674+
jl_symbol_name(name),
675+
jl_symbol_name(m->file),
676+
m->line);
671677
}
672678

673679
int ishidden = !!strchr(jl_symbol_name(name), '#');

test/parse.jl

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -695,6 +695,11 @@ let m_error, error_out, filename = Base.source_path()
695695
m_error = try @eval method_c6(A; B) = 3; catch e; e; end
696696
error_out = sprint(showerror, m_error)
697697
@test error_out == "syntax: keyword argument \"B\" needs a default value"
698+
699+
# issue #20614
700+
m_error = try @eval foo{N}(types::NTuple{N}, values::Vararg{Any,N}, c) = nothing; catch e; e; end
701+
error_out = sprint(showerror, m_error)
702+
@test startswith(error_out, "ArgumentError: Vararg on non-final argument")
698703
end
699704

700705
# issue #7272

0 commit comments

Comments
 (0)