Allow if filtering in list comprehensions

--
MOS_MIGRATED_REVID=93881507
diff --git a/src/test/java/com/google/devtools/build/lib/syntax/EvaluationTest.java b/src/test/java/com/google/devtools/build/lib/syntax/EvaluationTest.java
index b410fa0..b3e5bcf 100644
--- a/src/test/java/com/google/devtools/build/lib/syntax/EvaluationTest.java
+++ b/src/test/java/com/google/devtools/build/lib/syntax/EvaluationTest.java
@@ -394,6 +394,29 @@
   }
 
   @Test
+  public void testListComprehensionsWithFiltering() throws Exception {
+    eval("range3 = [0, 1, 2]"); // used below
+
+    assertThat(eval("[a for a in (4, None, 2, None, 1) if a != None]").toString())
+        .isEqualTo("[4, 2, 1]");
+    assertThat(eval("[b+c for b in [0, 1, 2] for c in [0, 1, 2] if b + c > 2]").toString())
+        .isEqualTo("[3, 3, 4]");
+    assertThat(eval("[d+e for d in range3 if d % 2 == 1 for e in range3]").toString())
+        .isEqualTo("[1, 2, 3]");
+    assertThat(eval(
+        "[[f,g] for f in [0, 1, 2, 3, 4] if f for g in [5, 6, 7, 8] if f * g % 12 == 0 ]")
+        .toString()).isEqualTo("[[2, 6], [3, 8], [4, 6]]");
+    assertThat(eval("[h for h in [4, 2, 0, 1] if h]").toString())
+        .isEqualTo("[4, 2, 1]");
+  }
+
+  @Test
+  public void testListComprehensionDefinitionOrder() throws Exception {
+    checkEvalErrorContains("name 'y' is not defined",
+        "[x for x in (1, 2) if y for y in (3, 4)]");
+  }
+
+  @Test
   public void testTupleDestructuring() throws Exception {
     eval("a, b = 1, 2");
     assertThat(lookup("a")).isEqualTo(1);