diff --git a/bin/sh/tests/builtins/Makefile b/bin/sh/tests/builtins/Makefile index 4d94d94c5d37..4811bb3221c6 100644 --- a/bin/sh/tests/builtins/Makefile +++ b/bin/sh/tests/builtins/Makefile @@ -113,6 +113,7 @@ FILES+= local3.0 FILES+= local4.0 FILES+= local5.0 FILES+= local6.0 +FILES+= local7.0 .if ${MK_NLS} != "no" FILES+= locale1.0 .endif diff --git a/bin/sh/tests/builtins/local7.0 b/bin/sh/tests/builtins/local7.0 new file mode 100644 index 000000000000..f7e6fc0aae97 --- /dev/null +++ b/bin/sh/tests/builtins/local7.0 @@ -0,0 +1,10 @@ +# $FreeBSD$ + +f() { + local x + readonly x=2 +} +unset x +f +x=4 +[ "$x" = 4 ] diff --git a/bin/sh/var.c b/bin/sh/var.c index 3af7dbeca19a..03d529b86fbc 100644 --- a/bin/sh/var.c +++ b/bin/sh/var.c @@ -802,6 +802,7 @@ poplocalvars(void) ckfree(lvp->text); optschanged(); } else if ((lvp->flags & (VUNSET|VSTRFIXED)) == VUNSET) { + vp->flags &= ~VREADONLY; (void)unsetvar(vp->text); } else { islocalevar = (vp->flags | lvp->flags) & VEXPORT &&