diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts
index cbc90968757..ec8f2b39352 100644
--- a/src/compiler/checker.ts
+++ b/src/compiler/checker.ts
@@ -780,7 +780,7 @@ module ts {
// But it cant, hence the accessible is going to be undefined, but that doesnt mean m.c is accessible
// It is accessible if the parent m is accessible because then m.c can be accessed through qualification
meaningToLook = getQualifiedLeftMeaning(meaning);
- symbol = symbol.parent;
+ symbol = getParentOfSymbol(symbol);
}
// This could be a symbol that is not exported in the external module
@@ -903,7 +903,7 @@ module ts {
if (accessibleSymbolChain && !needsQualification(accessibleSymbolChain[0], enclosingDeclaration, accessibleSymbolChain.length === 1 ? meaning : getQualifiedLeftMeaning(meaning))) {
break;
}
- symbol = accessibleSymbolChain ? accessibleSymbolChain[0].parent : symbol.parent;
+ symbol = getParentOfSymbol(accessibleSymbolChain ? accessibleSymbolChain[0] : symbol);
meaning = getQualifiedLeftMeaning(meaning);
}
diff --git a/tests/baselines/reference/moduleSymbolMerging.js b/tests/baselines/reference/moduleSymbolMerging.js
new file mode 100644
index 00000000000..4b35f939873
--- /dev/null
+++ b/tests/baselines/reference/moduleSymbolMerging.js
@@ -0,0 +1,42 @@
+//// [tests/cases/compiler/moduleSymbolMerging.ts] ////
+
+//// [A.ts]
+
+module A { export interface I {} }
+
+//// [B.ts]
+///
+module A { ; }
+module B {
+ export function f(): A.I { return null; }
+}
+
+
+
+//// [A.js]
+//// [B.js]
+var A;
+(function (A) {
+ ;
+})(A || (A = {}));
+var B;
+(function (B) {
+ function f() {
+ return null;
+ }
+ B.f = f;
+})(B || (B = {}));
+
+
+//// [A.d.ts]
+declare module A {
+ interface I {
+ }
+}
+//// [B.d.ts]
+///
+declare module A {
+}
+declare module B {
+ function f(): A.I;
+}
diff --git a/tests/cases/compiler/moduleSymbolMerging.ts b/tests/cases/compiler/moduleSymbolMerging.ts
new file mode 100644
index 00000000000..03df2c5e596
--- /dev/null
+++ b/tests/cases/compiler/moduleSymbolMerging.ts
@@ -0,0 +1,12 @@
+// @declaration: true
+
+// @Filename: A.ts
+module A { export interface I {} }
+
+// @Filename: B.ts
+///
+module A { ; }
+module B {
+ export function f(): A.I { return null; }
+}
+