diff --git a/samples/main.cc b/samples/main.cc
index ebc0c6d..fa58010 100644
--- a/samples/main.cc
+++ b/samples/main.cc
@@ -288,7 +288,7 @@
     return 1;
   }
   if (!reader->Parse()) {
-    std::cerr << reader->error() << std::endl;
+    std::cerr << "Parse: " << reader->error() << std::endl;
     return 1;
   }
 
@@ -307,13 +307,13 @@
 
   tint::TypeDeterminer td(&ctx, &mod);
   if (!td.Determine()) {
-    std::cerr << td.error() << std::endl;
+    std::cerr << "Type Determination: " << td.error() << std::endl;
     return 1;
   }
 
   tint::Validator v;
   if (!v.Validate(mod)) {
-    std::cerr << v.error() << std::endl;
+    std::cerr << "Validation: " << v.error() << std::endl;
     return 1;
   }
 
diff --git a/src/type_determiner.cc b/src/type_determiner.cc
index b732370..bad79f8 100644
--- a/src/type_determiner.cc
+++ b/src/type_determiner.cc
@@ -126,7 +126,8 @@
   }
 
   if (var->storage_class() != ast::StorageClass::kNone) {
-    error_ = "function variable has a non-function storage class";
+    set_error(stmt->source(),
+              "function variable has a non-function storage class");
     return false;
   }
 
@@ -308,14 +309,16 @@
     if (ident->has_path()) {
       auto* imp = mod_->FindImportByName(ident->path());
       if (imp == nullptr) {
-        error_ = "Unable to find import for " + ident->name();
+        set_error(expr->source(), "Unable to find import for " + ident->name());
         return false;
       }
 
       uint32_t ext_id = 0;
-      auto* result_type =
-          GetImportData(imp->path(), ident->name(), expr->params(), &ext_id);
+      auto* result_type = GetImportData(expr->source(), imp->path(),
+                                        ident->name(), expr->params(), &ext_id);
       if (result_type == nullptr) {
+        set_error(expr->source(),
+                  "Unable to determine result type for GLSL expression");
         return false;
       }
 
@@ -414,7 +417,8 @@
     return true;
   }
 
-  set_error(expr->source(), "invalid type in member accessor");
+  set_error(expr->source(),
+            "invalid type " + data_type->type_name() + " in member accessor");
   return false;
 }
 
@@ -489,6 +493,7 @@
     return true;
   }
 
+  set_error(expr->source(), "Unknown binary expression");
   return false;
 }
 
@@ -573,6 +578,7 @@
 }
 
 ast::type::Type* TypeDeterminer::GetImportData(
+    const Source& source,
     const std::string& path,
     const std::string& name,
     const ast::ExpressionList& params,
@@ -603,13 +609,14 @@
       name == "sqrt" || name == "inversesqrt" || name == "normalize" ||
       name == "length") {
     if (params.size() != 1) {
-      error_ = "incorrect number of parameters for " + name +
-               ". Expected 1 got " + std::to_string(params.size());
+      set_error(source, "incorrect number of parameters for " + name +
+                            ". Expected 1 got " +
+                            std::to_string(params.size()));
       return nullptr;
     }
     if (!params[0]->result_type()->is_float_scalar_or_vector()) {
-      error_ = "incorrect type for " + name +
-               ". Requires a float scalar or a float vector";
+      set_error(source, "incorrect type for " + name +
+                            ". Requires a float scalar or a float vector");
       return nullptr;
     }
 
diff --git a/src/type_determiner.h b/src/type_determiner.h
index ca73c6c..770e00b 100644
--- a/src/type_determiner.h
+++ b/src/type_determiner.h
@@ -92,12 +92,14 @@
   }
 
   /// Retrieves information for the requested import.
+  /// @param src the source of the import
   /// @param path the import path
   /// @param name the method name to get information on
   /// @param params the parameters to the method call
   /// @param id out parameter for the external call ID. Must not be a nullptr.
   /// @returns the return type of |name| in |path| or nullptr on error.
-  ast::type::Type* GetImportData(const std::string& path,
+  ast::type::Type* GetImportData(const Source& src,
+                                 const std::string& path,
                                  const std::string& name,
                                  const ast::ExpressionList& params,
                                  uint32_t* id);
diff --git a/src/type_determiner_test.cc b/src/type_determiner_test.cc
index d6ebdbf..b793110 100644
--- a/src/type_determiner_test.cc
+++ b/src/type_determiner_test.cc
@@ -1521,7 +1521,8 @@
   ASSERT_TRUE(td()->DetermineResultType(params)) << td()->error();
 
   uint32_t id = 0;
-  auto* type = td()->GetImportData("GLSL.std.450", param.name, params, &id);
+  auto* type =
+      td()->GetImportData({0, 0}, "GLSL.std.450", param.name, params, &id);
   ASSERT_NE(type, nullptr);
   EXPECT_TRUE(type->is_float_scalar());
   EXPECT_EQ(id, param.value);
@@ -1548,7 +1549,8 @@
   ASSERT_TRUE(td()->DetermineResultType(params)) << td()->error();
 
   uint32_t id = 0;
-  auto* type = td()->GetImportData("GLSL.std.450", param.name, params, &id);
+  auto* type =
+      td()->GetImportData({0, 0}, "GLSL.std.450", param.name, params, &id);
   ASSERT_NE(type, nullptr);
   EXPECT_TRUE(type->is_float_vector());
   EXPECT_EQ(type->AsVector()->size(), 3);
@@ -1567,7 +1569,8 @@
   ASSERT_TRUE(td()->DetermineResultType(params)) << td()->error();
 
   uint32_t id = 0;
-  auto* type = td()->GetImportData("GLSL.std.450", param.name, params, &id);
+  auto* type =
+      td()->GetImportData({0, 0}, "GLSL.std.450", param.name, params, &id);
   ASSERT_EQ(type, nullptr);
   EXPECT_EQ(td()->error(), std::string("incorrect type for ") + param.name +
                                ". Requires a float scalar or a float vector");
@@ -1578,7 +1581,8 @@
 
   ast::ExpressionList params;
   uint32_t id = 0;
-  auto* type = td()->GetImportData("GLSL.std.450", param.name, params, &id);
+  auto* type =
+      td()->GetImportData({0, 0}, "GLSL.std.450", param.name, params, &id);
   ASSERT_EQ(type, nullptr);
   EXPECT_EQ(td()->error(), std::string("incorrect number of parameters for ") +
                                param.name + ". Expected 1 got 0");
@@ -1599,7 +1603,8 @@
   ASSERT_TRUE(td()->DetermineResultType(params)) << td()->error();
 
   uint32_t id = 0;
-  auto* type = td()->GetImportData("GLSL.std.450", param.name, params, &id);
+  auto* type =
+      td()->GetImportData({0, 0}, "GLSL.std.450", param.name, params, &id);
   ASSERT_EQ(type, nullptr);
   EXPECT_EQ(td()->error(), std::string("incorrect number of parameters for ") +
                                param.name + ". Expected 1 got 3");
@@ -1648,7 +1653,8 @@
   ASSERT_TRUE(td()->DetermineResultType(params)) << td()->error();
 
   uint32_t id = 0;
-  auto* type = td()->GetImportData("GLSL.std.450", "length", params, &id);
+  auto* type =
+      td()->GetImportData({0, 0}, "GLSL.std.450", "length", params, &id);
   ASSERT_NE(type, nullptr);
   EXPECT_TRUE(type->is_float_scalar());
   EXPECT_EQ(id, GLSLstd450Length);
@@ -1673,7 +1679,8 @@
   ASSERT_TRUE(td()->DetermineResultType(params)) << td()->error();
 
   uint32_t id = 0;
-  auto* type = td()->GetImportData("GLSL.std.450", "length", params, &id);
+  auto* type =
+      td()->GetImportData({0, 0}, "GLSL.std.450", "length", params, &id);
   ASSERT_NE(type, nullptr);
   EXPECT_TRUE(type->is_float_scalar());
   EXPECT_EQ(id, GLSLstd450Length);
@@ -1689,7 +1696,8 @@
   ASSERT_TRUE(td()->DetermineResultType(params)) << td()->error();
 
   uint32_t id = 0;
-  auto* type = td()->GetImportData("GLSL.std.450", "length", params, &id);
+  auto* type =
+      td()->GetImportData({0, 0}, "GLSL.std.450", "length", params, &id);
   ASSERT_EQ(type, nullptr);
   EXPECT_EQ(
       td()->error(),
@@ -1699,7 +1707,8 @@
 TEST_F(TypeDeterminerTest, ImportData_Length_Error_NoParams) {
   ast::ExpressionList params;
   uint32_t id = 0;
-  auto* type = td()->GetImportData("GLSL.std.450", "length", params, &id);
+  auto* type =
+      td()->GetImportData({0, 0}, "GLSL.std.450", "length", params, &id);
   ASSERT_EQ(type, nullptr);
   EXPECT_EQ(td()->error(),
             "incorrect number of parameters for length. Expected 1 got 0");
@@ -1718,7 +1727,8 @@
   ASSERT_TRUE(td()->DetermineResultType(params)) << td()->error();
 
   uint32_t id = 0;
-  auto* type = td()->GetImportData("GLSL.std.450", "length", params, &id);
+  auto* type =
+      td()->GetImportData({0, 0}, "GLSL.std.450", "length", params, &id);
   ASSERT_EQ(type, nullptr);
   EXPECT_EQ(td()->error(),
             "incorrect number of parameters for length. Expected 1 got 3");
@@ -1740,7 +1750,8 @@
   ASSERT_TRUE(td()->DetermineResultType(params)) << td()->error();
 
   uint32_t id = 0;
-  auto* type = td()->GetImportData("GLSL.std.450", param.name, params, &id);
+  auto* type =
+      td()->GetImportData({0, 0}, "GLSL.std.450", param.name, params, &id);
   ASSERT_NE(type, nullptr);
   EXPECT_TRUE(type->is_float_scalar());
   EXPECT_EQ(id, param.value);
@@ -1777,7 +1788,8 @@
   ASSERT_TRUE(td()->DetermineResultType(params)) << td()->error();
 
   uint32_t id = 0;
-  auto* type = td()->GetImportData("GLSL.std.450", param.name, params, &id);
+  auto* type =
+      td()->GetImportData({0, 0}, "GLSL.std.450", param.name, params, &id);
   ASSERT_NE(type, nullptr);
   EXPECT_TRUE(type->is_float_vector());
   EXPECT_EQ(type->AsVector()->size(), 3);
@@ -1798,7 +1810,8 @@
   ASSERT_TRUE(td()->DetermineResultType(params)) << td()->error();
 
   uint32_t id = 0;
-  auto* type = td()->GetImportData("GLSL.std.450", param.name, params, &id);
+  auto* type =
+      td()->GetImportData({0, 0}, "GLSL.std.450", param.name, params, &id);
   ASSERT_EQ(type, nullptr);
   EXPECT_EQ(td()->error(),
             std::string("incorrect type for ") + param.name +
@@ -1810,7 +1823,8 @@
 
   ast::ExpressionList params;
   uint32_t id = 0;
-  auto* type = td()->GetImportData("GLSL.std.450", param.name, params, &id);
+  auto* type =
+      td()->GetImportData({0, 0}, "GLSL.std.450", param.name, params, &id);
   ASSERT_EQ(type, nullptr);
   EXPECT_EQ(td()->error(), std::string("incorrect number of parameters for ") +
                                param.name + ". Expected 2 got 0");
@@ -1827,7 +1841,8 @@
   ASSERT_TRUE(td()->DetermineResultType(params)) << td()->error();
 
   uint32_t id = 0;
-  auto* type = td()->GetImportData("GLSL.std.450", param.name, params, &id);
+  auto* type =
+      td()->GetImportData({0, 0}, "GLSL.std.450", param.name, params, &id);
   ASSERT_EQ(type, nullptr);
   EXPECT_EQ(td()->error(), std::string("incorrect number of parameters for ") +
                                param.name + ". Expected 2 got 1");
@@ -1863,7 +1878,8 @@
   ASSERT_TRUE(td()->DetermineResultType(params)) << td()->error();
 
   uint32_t id = 0;
-  auto* type = td()->GetImportData("GLSL.std.450", param.name, params, &id);
+  auto* type =
+      td()->GetImportData({0, 0}, "GLSL.std.450", param.name, params, &id);
   ASSERT_EQ(type, nullptr);
   EXPECT_EQ(td()->error(),
             std::string("mismatched parameter types for ") + param.name);
@@ -1892,7 +1908,8 @@
   ASSERT_TRUE(td()->DetermineResultType(params)) << td()->error();
 
   uint32_t id = 0;
-  auto* type = td()->GetImportData("GLSL.std.450", param.name, params, &id);
+  auto* type =
+      td()->GetImportData({0, 0}, "GLSL.std.450", param.name, params, &id);
   ASSERT_EQ(type, nullptr);
   EXPECT_EQ(td()->error(),
             std::string("mismatched parameter types for ") + param.name);
@@ -1913,7 +1930,8 @@
   ASSERT_TRUE(td()->DetermineResultType(params)) << td()->error();
 
   uint32_t id = 0;
-  auto* type = td()->GetImportData("GLSL.std.450", param.name, params, &id);
+  auto* type =
+      td()->GetImportData({0, 0}, "GLSL.std.450", param.name, params, &id);
   ASSERT_EQ(type, nullptr);
   EXPECT_EQ(td()->error(), std::string("incorrect number of parameters for ") +
                                param.name + ". Expected 2 got 3");
@@ -1942,7 +1960,8 @@
   ASSERT_TRUE(td()->DetermineResultType(params)) << td()->error();
 
   uint32_t id = 0;
-  auto* type = td()->GetImportData("GLSL.std.450", "distance", params, &id);
+  auto* type =
+      td()->GetImportData({0, 0}, "GLSL.std.450", "distance", params, &id);
   ASSERT_NE(type, nullptr);
   EXPECT_TRUE(type->is_float_scalar());
   EXPECT_EQ(id, GLSLstd450Distance);
@@ -1977,7 +1996,8 @@
   ASSERT_TRUE(td()->DetermineResultType(params)) << td()->error();
 
   uint32_t id = 0;
-  auto* type = td()->GetImportData("GLSL.std.450", "distance", params, &id);
+  auto* type =
+      td()->GetImportData({0, 0}, "GLSL.std.450", "distance", params, &id);
   ASSERT_NE(type, nullptr);
   EXPECT_TRUE(type->IsF32());
   EXPECT_EQ(id, GLSLstd450Distance);
@@ -1995,7 +2015,8 @@
   ASSERT_TRUE(td()->DetermineResultType(params)) << td()->error();
 
   uint32_t id = 0;
-  auto* type = td()->GetImportData("GLSL.std.450", "distance", params, &id);
+  auto* type =
+      td()->GetImportData({0, 0}, "GLSL.std.450", "distance", params, &id);
   ASSERT_EQ(type, nullptr);
   EXPECT_EQ(td()->error(),
             "incorrect type for distance. Requires float scalar or a float "
@@ -2005,7 +2026,8 @@
 TEST_F(TypeDeterminerTest, ImportData_Distance_Error_NoParams) {
   ast::ExpressionList params;
   uint32_t id = 0;
-  auto* type = td()->GetImportData("GLSL.std.450", "distance", params, &id);
+  auto* type =
+      td()->GetImportData({0, 0}, "GLSL.std.450", "distance", params, &id);
   ASSERT_EQ(type, nullptr);
   EXPECT_EQ(td()->error(),
             "incorrect number of parameters for distance. Expected 2 got 0");
@@ -2020,7 +2042,8 @@
   ASSERT_TRUE(td()->DetermineResultType(params)) << td()->error();
 
   uint32_t id = 0;
-  auto* type = td()->GetImportData("GLSL.std.450", "distance", params, &id);
+  auto* type =
+      td()->GetImportData({0, 0}, "GLSL.std.450", "distance", params, &id);
   ASSERT_EQ(type, nullptr);
   EXPECT_EQ(td()->error(),
             "incorrect number of parameters for distance. Expected 2 got 1");
@@ -2054,7 +2077,8 @@
   ASSERT_TRUE(td()->DetermineResultType(params)) << td()->error();
 
   uint32_t id = 0;
-  auto* type = td()->GetImportData("GLSL.std.450", "distance", params, &id);
+  auto* type =
+      td()->GetImportData({0, 0}, "GLSL.std.450", "distance", params, &id);
   ASSERT_EQ(type, nullptr);
   EXPECT_EQ(td()->error(), "mismatched parameter types for distance");
 }
@@ -2080,7 +2104,8 @@
   ASSERT_TRUE(td()->DetermineResultType(params)) << td()->error();
 
   uint32_t id = 0;
-  auto* type = td()->GetImportData("GLSL.std.450", "distance", params, &id);
+  auto* type =
+      td()->GetImportData({0, 0}, "GLSL.std.450", "distance", params, &id);
   ASSERT_EQ(type, nullptr);
   EXPECT_EQ(td()->error(), "mismatched parameter types for distance");
 }
@@ -2098,7 +2123,8 @@
   ASSERT_TRUE(td()->DetermineResultType(params)) << td()->error();
 
   uint32_t id = 0;
-  auto* type = td()->GetImportData("GLSL.std.450", "distance", params, &id);
+  auto* type =
+      td()->GetImportData({0, 0}, "GLSL.std.450", "distance", params, &id);
   ASSERT_EQ(type, nullptr);
   EXPECT_EQ(td()->error(),
             "incorrect number of parameters for distance. Expected 2 got 3");
