I think there's a related regression in the latest devel commit. Creating a local variable with the same name as a higher-scoped nameref pointing to an unset variable creates a local variable with the name of the target of the nameref.
Starting with: declare -n ref=var f() { local ref=Y; declare -p ref var; local; } This still works fine in both latest and previous: $ var=X; f declare -- ref="Y" declare -- var="X" ref=Y But the behavior in the unset target case changed from the expected: $ unset var; f declare -- ref="Y" bash: declare: var: not found ref=Y to: $ unset var; f declare -n ref="var" declare -- var="Y" var=Y