Don't crash on non-constant unary expressions

MOE_MIGRATED_REVID=137746249
diff --git a/java/com/google/turbine/parse/ConstExpressionParser.java b/java/com/google/turbine/parse/ConstExpressionParser.java
index ba1bd69..7358f5f 100644
--- a/java/com/google/turbine/parse/ConstExpressionParser.java
+++ b/java/com/google/turbine/parse/ConstExpressionParser.java
@@ -406,6 +406,9 @@
   private Tree.Expression unaryRest(TurbineOperatorKind op) {
     boolean negate = op == TurbineOperatorKind.NEG;
     Tree.Expression expr = primary(negate);
+    if (expr == null) {
+      return null;
+    }
     if (negate && expr.kind() == Tree.Kind.LITERAL) {
       Tree.Literal lit = (Tree.Literal) expr;
       switch (lit.tykind()) {
@@ -416,9 +419,6 @@
           break;
       }
     }
-    if (expr == null) {
-      return null;
-    }
     return new Tree.Unary(position, expr, op);
   }
 
diff --git a/javatests/com/google/turbine/lower/LowerIntegrationTest.java b/javatests/com/google/turbine/lower/LowerIntegrationTest.java
index e775334..33fd4bc 100644
--- a/javatests/com/google/turbine/lower/LowerIntegrationTest.java
+++ b/javatests/com/google/turbine/lower/LowerIntegrationTest.java
@@ -245,6 +245,7 @@
       "tyvar_bound.test",
       "type_anno_hello.test",
       "type_anno_array_dims.test",
+      "nonconst_unary_expression.test",
     };
     List<Object[]> tests =
         ImmutableList.copyOf(testCases).stream().map(x -> new Object[] {x}).collect(toList());
diff --git a/javatests/com/google/turbine/lower/testdata/nonconst_unary_expression.test b/javatests/com/google/turbine/lower/testdata/nonconst_unary_expression.test
new file mode 100644
index 0000000..884e88b
--- /dev/null
+++ b/javatests/com/google/turbine/lower/testdata/nonconst_unary_expression.test
@@ -0,0 +1,5 @@
+=== Test.java ===
+import java.util.concurrent.TimeUnit;
+class Test {
+  public static final int M = -((int) TimeUnit.DAYS.toMinutes(1)); 
+}
\ No newline at end of file