julia> macro hasreturn(n)
quote
return $n>1 ? (1, 1) : 1
end
end
@hasreturn (macro with 1 method)
julia> a, b = @hasreturn 2
ERROR: syntax: ssavalue with no def
julia> macro noreturn(n)
quote
$n>1 ? (1, 1) : 1
end
end
@noreturn (macro with 1 method)
julia> a, b = @noreturn 2
(1, 1)
julia> x = @noreturn 1
1
The two macros are exactly not the same, see the following CodeInfo for judging:

I couldn't quite get your point, can you please be more expressioned about your issue?
As per your problem with a, b = @hasreturn 2, you can workaround that by declaring a function/method, e.g,
fun() = @hasreturn 2
a, b = fun()
cuz, as seen from CodeInfo, all that hasreturn is doing is to return a return statement, which can be assigned to a function/method, and then explicitly set a, b to those values.

I suspect that @timholy is suggesting that ERROR: syntax: ssavalue with no def is not a very user friendly error message in the circumstances.
Note that the macro doesn't have any significance here, it's just doing a bad job with the error message:
julia> Meta.@lower a, b = return 1
:($(Expr(:error, "ssavalue with no def")))
I know it's a bit of stiff to comment, but what's the resolution of this issue? What is this issue targeting at? To resolve the ERROR thrown?
a = return 1 just returns 1, without changing a. So a, b = return 1 likewise should just return 1, without changing either a or b, I'd say.
Most helpful comment
a = return 1just returns1, without changinga. Soa, b = return 1likewise should just return1, without changing eitheraorb, I'd say.