summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--Src/params.c6
2 files changed, 9 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index 824052c96..f2390520a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2015-11-23  Peter Stephenson  <p.stephenson@samsung.com>
+
+	* 37203: Src/params.c: WARN_CREATE_GLOBAL test in wrong place
+	for associative array.
+
 2015-11-22  Barton E. Schaefer  <schaefer@zsh.org>
 
 	* Matthew Martin: 37201: Completion/Unix/Type/_groups: change
diff --git a/Src/params.c b/Src/params.c
index b121bd6ad..602f69f33 100644
--- a/Src/params.c
+++ b/Src/params.c
@@ -2970,6 +2970,7 @@ sethparam(char *s, char **val)
     struct value vbuf;
     Value v;
     char *t = s;
+    int checkcreate = 0;
 
     if (!isident(s)) {
 	zerr("not an identifier: %s", s);
@@ -2988,8 +2989,7 @@ sethparam(char *s, char **val)
     queue_signals();
     if (!(v = fetchvalue(&vbuf, &s, 1, SCANPM_ASSIGNING))) {
 	createparam(t, PM_HASHED);
-	if (isset(WARNCREATEGLOBAL) && locallevel > 0)
-	    check_warn_create(v->pm, "associative array");
+	checkcreate = isset(WARNCREATEGLOBAL) && locallevel > 0;
     } else if (!(PM_TYPE(v->pm->node.flags) & PM_HASHED) &&
 	     !(v->pm->node.flags & PM_SPECIAL)) {
 	unsetparam(t);
@@ -3002,6 +3002,8 @@ sethparam(char *s, char **val)
 	    unqueue_signals();
 	    return NULL;
 	}
+    if (checkcreate)
+	check_warn_create(v->pm, "associative array");
     setarrvalue(v, val);
     unqueue_signals();
     return v->pm;