merge 3.5 (#24569)
diff --git a/Lib/test/test_unpack_ex.py b/Lib/test/test_unpack_ex.py
index 01f57b9..d27eef0 100644
--- a/Lib/test/test_unpack_ex.py
+++ b/Lib/test/test_unpack_ex.py
@@ -128,6 +128,9 @@
     ...                          for i in range(1000)) + "}"))
     1000
 
+    >>> {0:1, **{0:2}, 0:3, 0:4}
+    {0: 4}
+
 List comprehension element unpacking
 
     >>> a, b, c = [0, 1, 2], 3, 4
diff --git a/Misc/NEWS b/Misc/NEWS
index 324c1bb..4ac9924 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -18,6 +18,20 @@
   now can't be disabled at compile time.
 
 
+What's New in Python 3.5.0 beta 4?
+==================================
+
+*Release date: XXXX-XX-XX*
+
+Core and Builtins
+-----------------
+
+- Issue #24569: Make PEP 448 dictionary evaluation more consistent.
+
+Library
+-------
+
+
 What's New in Python 3.5.0 beta 3?
 ==================================
 
diff --git a/Python/ceval.c b/Python/ceval.c
index e68ae33..ac52ad9 100644
--- a/Python/ceval.c
+++ b/Python/ceval.c
@@ -2561,22 +2561,25 @@
         }
 
         TARGET(BUILD_MAP) {
+            int i;
             PyObject *map = _PyDict_NewPresized((Py_ssize_t)oparg);
             if (map == NULL)
                 goto error;
-            while (--oparg >= 0) {
+            for (i = oparg; i > 0; i--) {
                 int err;
-                PyObject *value = TOP();
-                PyObject *key = SECOND();
-                STACKADJ(-2);
+                PyObject *key = PEEK(2*i);
+                PyObject *value = PEEK(2*i - 1);
                 err = PyDict_SetItem(map, key, value);
-                Py_DECREF(value);
-                Py_DECREF(key);
                 if (err != 0) {
                     Py_DECREF(map);
                     goto error;
                 }
             }
+
+            while (oparg--) {
+                Py_DECREF(POP());
+                Py_DECREF(POP());
+            }
             PUSH(map);
             DISPATCH();
         }