diff --git a/internal/ast/utilities.go b/internal/ast/utilities.go
index 8df59ec51d..7bab1f5f90 100644
--- a/internal/ast/utilities.go
+++ b/internal/ast/utilities.go
@@ -885,7 +885,8 @@ func newParentInChildrenSetter() func(node *Node) bool {
 	}
 
 	state.visit = func(node *Node) bool {
-		if state.parent != nil {
+		if state.parent != nil && node.Parent != state.parent {
+			// Avoid data races on no-ops
 			node.Parent = state.parent
 		}
 		saveParent := state.parent
diff --git a/internal/binder/binder.go b/internal/binder/binder.go
index 5e3dcdbcda..433aa6c90e 100644
--- a/internal/binder/binder.go
+++ b/internal/binder/binder.go
@@ -762,7 +762,10 @@ func (b *Binder) bind(node *ast.Node) bool {
 func (b *Binder) setJSDocParents(node *ast.Node) {
 	for _, jsdoc := range node.JSDoc(b.file) {
 		setParent(jsdoc, node)
-		ast.SetParentInChildren(jsdoc)
+		if jsdoc.Kind != ast.KindJSDocImportTag {
+			// JSDocImportTag children have parents set during parsing for module resolution purposes.
+			ast.SetParentInChildren(jsdoc)
+		}
 	}
 }
 
diff --git a/internal/parser/references.go b/internal/parser/references.go
index e3c130eb10..5d72f66db8 100644
--- a/internal/parser/references.go
+++ b/internal/parser/references.go
@@ -31,7 +31,9 @@ func collectModuleReferences(file *ast.SourceFile, node *ast.Statement, inAmbien
 		if moduleNameExpr != nil && ast.IsStringLiteral(moduleNameExpr) {
 			moduleName := moduleNameExpr.AsStringLiteral().Text
 			if moduleName != "" && (!inAmbientModule || !tspath.IsExternalModuleNameRelative(moduleName)) {
-				ast.SetParentInChildren(node) // we need parent data on imports before the program is fully bound, so we ensure it's set here
+				if node.Kind != ast.KindJSImportDeclaration {
+					ast.SetParentInChildren(node) // we need parent data on imports before the program is fully bound, so we ensure it's set here
+				}
 				ast.SetImportsOfSourceFile(file, append(file.Imports(), moduleNameExpr))
 				// !!! removed `&& p.currentNodeModulesDepth == 0`
 				if file.UsesUriStyleNodeCoreModules != core.TSTrue && !file.IsDeclarationFile {
diff --git a/testdata/baselines/reference/submodule/conformance/importTag17.errors.txt b/testdata/baselines/reference/submodule/conformance/importTag17.errors.txt
index 23d82435df..defcfc35bc 100644
--- a/testdata/baselines/reference/submodule/conformance/importTag17.errors.txt
+++ b/testdata/baselines/reference/submodule/conformance/importTag17.errors.txt
@@ -1,4 +1,4 @@
-/a.js(1,29): error TS2307: Cannot find module 'foo' or its corresponding type declarations.
+/a.js(5,15): error TS2749: 'Import' refers to a value, but is being used as a type here. Did you mean 'typeof Import'?
 /a.js(12,15): error TS2749: 'Require' refers to a value, but is being used as a type here. Did you mean 'typeof Require'?
 
 
@@ -22,12 +22,12 @@
     
 ==== /a.js (2 errors) ====
     /** @import { Import } from 'foo' with { 'resolution-mode': 'import' } */
-                                ~~~~~
-!!! error TS2307: Cannot find module 'foo' or its corresponding type declarations.
     /** @import { Require } from 'foo' with { 'resolution-mode': 'require' } */
     
     /**
      * @returns { Import }
+                  ~~~~~~
+!!! error TS2749: 'Import' refers to a value, but is being used as a type here. Did you mean 'typeof Import'?
      */
     export function f1() {
         return 1;
diff --git a/testdata/baselines/reference/submoduleAccepted/conformance/importTag17.errors.txt.diff b/testdata/baselines/reference/submoduleAccepted/conformance/importTag17.errors.txt.diff
index 26073430f0..1c6f910b5b 100644
--- a/testdata/baselines/reference/submoduleAccepted/conformance/importTag17.errors.txt.diff
+++ b/testdata/baselines/reference/submoduleAccepted/conformance/importTag17.errors.txt.diff
@@ -3,21 +3,17 @@
 @@= skipped -0, +0 lines =@@
 -/a.js(8,5): error TS2322: Type '1' is not assignable to type '"module"'.
 -/a.js(15,5): error TS2322: Type '1' is not assignable to type '"script"'.
-+/a.js(1,29): error TS2307: Cannot find module 'foo' or its corresponding type declarations.
++/a.js(5,15): error TS2749: 'Import' refers to a value, but is being used as a type here. Did you mean 'typeof Import'?
 +/a.js(12,15): error TS2749: 'Require' refers to a value, but is being used as a type here. Did you mean 'typeof Require'?
 
 
  ==== /node_modules/@types/foo/package.json (0 errors) ====
-@@= skipped -21, +21 lines =@@
-     
- ==== /a.js (2 errors) ====
-     /** @import { Import } from 'foo' with { 'resolution-mode': 'import' } */
-+                                ~~~~~
-+!!! error TS2307: Cannot find module 'foo' or its corresponding type declarations.
-     /** @import { Require } from 'foo' with { 'resolution-mode': 'require' } */
+@@= skipped -25, +25 lines =@@
      
      /**
-@@= skipped -7, +9 lines =@@
+      * @returns { Import }
++                  ~~~~~~
++!!! error TS2749: 'Import' refers to a value, but is being used as a type here. Did you mean 'typeof Import'?
       */
      export function f1() {
          return 1;