Index: trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/ExpressionFactory.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/ExpressionFactory.java	(revision 17831)
+++ trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/ExpressionFactory.java	(revision 17832)
@@ -60,5 +60,6 @@
                     return identity;
                 } else if (args.size() == 1) {
-                    return unaryOperator.applyAsDouble(Cascade.convertTo(args.get(0).evaluate(env), Double.class));
+                    Double arg = Cascade.convertTo(args.get(0).evaluate(env), Double.class);
+                    return arg == null ? null : unaryOperator.applyAsDouble(arg);
                 } else {
                     return args.stream()
Index: trunk/test/unit/org/openstreetmap/josm/gui/mappaint/mapcss/MapCSSParserTest.java
===================================================================
--- trunk/test/unit/org/openstreetmap/josm/gui/mappaint/mapcss/MapCSSParserTest.java	(revision 17831)
+++ trunk/test/unit/org/openstreetmap/josm/gui/mappaint/mapcss/MapCSSParserTest.java	(revision 17832)
@@ -612,4 +612,5 @@
                 "neg: -13;" +
                 "not: !0;" +
+                "null0: -tag(does_not_exist);" +
                 "null1: tag(x1) + tag(x2);" +
                 "null2: 3 + tag(does_not_exist) + 5;" +
@@ -624,4 +625,5 @@
         assertEquals(-13.0, mc.getCascade(null).get("neg"));
         assertEquals(true, mc.getCascade(null).get("not"));
+        assertNull(mc.getCascade(null).get("null0"));
         assertNull(mc.getCascade(null).get("null1"));
         assertEquals(8.0, mc.getCascade(null).get("null2"));
