diff --git a/src/tint/reader/wgsl/parser_impl.cc b/src/tint/reader/wgsl/parser_impl.cc
index c9221f1..524b85f 100644
--- a/src/tint/reader/wgsl/parser_impl.cc
+++ b/src/tint/reader/wgsl/parser_impl.cc
@@ -3364,6 +3364,7 @@
         return add_error(peek(0).source(), "expected 'var' for variable declaration");
     }
 
+    Source source;
     const ast::Expression* lhs = nullptr;
     ast::BinaryOp compound_op = ast::BinaryOp::kNone;
     if (peek_is(Token::Type::kUnderscore)) {
@@ -3372,6 +3373,7 @@
         if (!expect("assignment", Token::Type::kEqual)) {
             return Failure::kErrored;
         }
+        source = last_source();
 
         lhs = create<ast::PhonyExpression>(t.source());
 
@@ -3388,12 +3390,13 @@
 
         // Handle increment and decrement statements.
         if (match(Token::Type::kPlusPlus)) {
-            return create<ast::IncrementDecrementStatement>(t.source(), lhs, true);
+            return create<ast::IncrementDecrementStatement>(last_source(), lhs, true);
         }
         if (match(Token::Type::kMinusMinus)) {
-            return create<ast::IncrementDecrementStatement>(t.source(), lhs, false);
+            return create<ast::IncrementDecrementStatement>(last_source(), lhs, false);
         }
 
+        source = peek().source();
         auto compound_op_result = compound_assignment_operator();
         if (compound_op_result.errored) {
             return Failure::kErrored;
@@ -3416,9 +3419,9 @@
     }
 
     if (compound_op != ast::BinaryOp::kNone) {
-        return create<ast::CompoundAssignmentStatement>(t.source(), lhs, rhs.value, compound_op);
+        return create<ast::CompoundAssignmentStatement>(source, lhs, rhs.value, compound_op);
     }
-    return create<ast::AssignmentStatement>(t.source(), lhs, rhs.value);
+    return create<ast::AssignmentStatement>(source, lhs, rhs.value);
 }
 
 // const_literal
diff --git a/src/tint/reader/wgsl/parser_impl_assignment_stmt_test.cc b/src/tint/reader/wgsl/parser_impl_assignment_stmt_test.cc
index 1f2b191..fd76c34 100644
--- a/src/tint/reader/wgsl/parser_impl_assignment_stmt_test.cc
+++ b/src/tint/reader/wgsl/parser_impl_assignment_stmt_test.cc
@@ -30,6 +30,11 @@
     ASSERT_NE(a->lhs, nullptr);
     ASSERT_NE(a->rhs, nullptr);
 
+    EXPECT_EQ(a->source.range.begin.line, 1u);
+    EXPECT_EQ(a->source.range.begin.column, 3u);
+    EXPECT_EQ(a->source.range.end.line, 1u);
+    EXPECT_EQ(a->source.range.end.column, 4u);
+
     ASSERT_TRUE(a->lhs->Is<ast::IdentifierExpression>());
     auto* ident = a->lhs->As<ast::IdentifierExpression>();
     EXPECT_EQ(ident->symbol, p->builder().Symbols().Get("a"));
@@ -53,6 +58,11 @@
     ASSERT_NE(a->lhs, nullptr);
     ASSERT_NE(a->rhs, nullptr);
 
+    EXPECT_EQ(a->source.range.begin.line, 1u);
+    EXPECT_EQ(a->source.range.begin.column, 12u);
+    EXPECT_EQ(a->source.range.end.line, 1u);
+    EXPECT_EQ(a->source.range.end.column, 13u);
+
     ASSERT_TRUE(a->rhs->Is<ast::IntLiteralExpression>());
     EXPECT_EQ(a->rhs->As<ast::IntLiteralExpression>()->value, 123);
     EXPECT_EQ(a->rhs->As<ast::IntLiteralExpression>()->suffix,
@@ -103,6 +113,11 @@
     ASSERT_NE(a->lhs, nullptr);
     ASSERT_NE(a->rhs, nullptr);
 
+    EXPECT_EQ(a->source.range.begin.line, 1u);
+    EXPECT_EQ(a->source.range.begin.column, 3u);
+    EXPECT_EQ(a->source.range.end.line, 1u);
+    EXPECT_EQ(a->source.range.end.column, 4u);
+
     ASSERT_TRUE(a->rhs->Is<ast::IntLiteralExpression>());
     EXPECT_EQ(a->rhs->As<ast::IntLiteralExpression>()->value, 123);
     EXPECT_EQ(a->rhs->As<ast::IntLiteralExpression>()->suffix,
@@ -163,6 +178,11 @@
     ASSERT_NE(a->rhs, nullptr);
     EXPECT_EQ(a->op, params.op);
 
+    EXPECT_EQ(a->source.range.begin.line, 1u);
+    EXPECT_EQ(a->source.range.begin.column, 3u);
+    EXPECT_EQ(a->source.range.end.line, 1u);
+    EXPECT_EQ(a->source.range.end.column, 3u + params.str.length());
+
     ASSERT_TRUE(a->lhs->Is<ast::IdentifierExpression>());
     auto* ident = a->lhs->As<ast::IdentifierExpression>();
     EXPECT_EQ(ident->symbol, p->builder().Symbols().Get("a"));
