A few more problematic test cases in this vein (tested against latest devel snapshot 20180803).
f() { local -n ref=var; local -A ref=([1]=); ref=([2]=); declare -p ref var; } unset ref var; f # declare -An ref=() # declare -A var=([1]="" ) declare -p ref # declare -a ref=([2]="") unset ref; var=0; f # declare -An ref=([1]="" ) # declare -- var="0" declare -p ref # declare -a ref=([2]="") f() { local -n ref=var; local -a ref=([1]=); ref=([2]=); declare -p ref var; } unset ref var; f # declare -an ref=() # declare -a var=([1]="") declare -p ref # declare -a ref=([2]="") unset ref; var=0; f # declare -an ref=([1]="") # declare -- var="0" declare -p ref # declare -a ref=([2]="") # same issues for `local -[iluctrx] ref=...' f() { local -n ref=var; local -i ref=([1]=); declare -p ref var; } unset var; f # declare -in ref="var" # declare -ai var=([1]="0") var=0; f # declare -in ref="var" # declare -a var=([1]="") # same issue for `local -[ilucAa] ref=...' f() { local -n ref=var; local ref=1; declare -p ref var; }; var=0; f var=0; f # bash: local: `1': invalid variable name for name reference # declare -n ref="var" # declare -- var="0"