diff --git a/src/macroexpand.scm b/src/macroexpand.scm index a0f05a3af687aa..5e55c7bbb29c16 100644 --- a/src/macroexpand.scm +++ b/src/macroexpand.scm @@ -210,7 +210,8 @@ ((atom? v) '()) (else (case (car v) - ((... kw |::| =) (try-arg-name (cadr v))) + ((|::|) (if (length= v 2) '() (try-arg-name (cadr v)))) + ((... kw =) (try-arg-name (cadr v))) ((escape) (list v)) ((hygienic-scope) (try-arg-name (cadr v))) ((meta) ;; allow certain per-argument annotations diff --git a/test/syntax.jl b/test/syntax.jl index 1d6193b2f2634a..76e15c78b27506 100644 --- a/test/syntax.jl +++ b/test/syntax.jl @@ -2686,3 +2686,9 @@ macro m_begin_hygiene(a) end @test @m_begin_hygiene([1, 2, 3]) == 1 + +macro m_nospecialize_unnamed_hygiene() + return :(f(@nospecialize(::Any)) = Any) +end + +@test @m_nospecialize_unnamed_hygiene()(1) === Any