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