Throw a static error when lvalue of an augmented assignment is a list.

RELNOTES:
  When the lvalue of an augmented assignment is a list, we now throw an error
  before evaluating the code (e.g. `a, b += 2, 3`).
PiperOrigin-RevId: 165906611
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/ValidationEnvironment.java b/src/main/java/com/google/devtools/build/lib/syntax/ValidationEnvironment.java
index 4415a85..6f5eb9c 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/ValidationEnvironment.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/ValidationEnvironment.java
@@ -158,6 +158,16 @@
     super.visit(node);
   }
 
+  @Override
+  public void visit(AugmentedAssignmentStatement node) {
+    if (node.getLValue().getExpression() instanceof ListLiteral) {
+      throw new ValidationException(
+          node.getLocation(), "cannot perform augmented assignment on a list or tuple expression");
+    }
+    // Other bad cases are handled when visiting the LValue node.
+    super.visit(node);
+  }
+
   /** Returns true if the current block is the top level i.e. has no parent. */
   private boolean isTopLevel() {
     return block.parent == null;
diff --git a/src/test/java/com/google/devtools/build/lib/syntax/SkylarkEvaluationTest.java b/src/test/java/com/google/devtools/build/lib/syntax/SkylarkEvaluationTest.java
index 374ac78..bd43adb 100644
--- a/src/test/java/com/google/devtools/build/lib/syntax/SkylarkEvaluationTest.java
+++ b/src/test/java/com/google/devtools/build/lib/syntax/SkylarkEvaluationTest.java
@@ -964,7 +964,8 @@
 
   @Test
   public void testInvalidAugmentedAssignment_ListLiteral() throws Exception {
-    new SkylarkTest().testIfErrorContains("cannot perform augmented assignment on a list literal",
+    new SkylarkTest().testIfErrorContains(
+        "cannot perform augmented assignment on a list or tuple expression",
         "def f(a, b):",
         "  [a, b] += []",
         "f(1, 2)");
diff --git a/src/test/java/com/google/devtools/build/lib/syntax/ValidationTest.java b/src/test/java/com/google/devtools/build/lib/syntax/ValidationTest.java
index 014d3be..604c53f 100644
--- a/src/test/java/com/google/devtools/build/lib/syntax/ValidationTest.java
+++ b/src/test/java/com/google/devtools/build/lib/syntax/ValidationTest.java
@@ -39,6 +39,11 @@
   }
 
   @Test
+  public void testAugmentedAssignmentWithMultipleLValues() {
+    checkError("cannot perform augmented assignment on a list or tuple expression", "a, b += 2, 3");
+  }
+
+  @Test
   public void testReturnOutsideFunction() throws Exception {
     checkError("Return statements must be inside a function", "return 2\n");
   }