Skip to content

Commit 1f8a20d

Browse files
authored
fix(compiler): Fix disambiguation of record label access (#2072)
1 parent f3007b4 commit 1f8a20d

File tree

2 files changed

+28
-1
lines changed

2 files changed

+28
-1
lines changed

compiler/src/typed/typecore.re

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2592,7 +2592,7 @@ and type_label_access = (env, srecord, lid) => {
25922592
let opath =
25932593
try({
25942594
let (p0, p, _) = extract_concrete_record(env, ty_exp);
2595-
Some((p0, p, repr(ty_exp).level == generic_level));
2595+
Some((p0, p, true));
25962596
}) {
25972597
| Not_found => None
25982598
};

compiler/test/suites/records.re

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ describe("records", ({test, testSkip}) => {
1313
let assertCompileError = makeCompileErrorRunner(test);
1414
let assertRun = makeRunner(test_or_skip);
1515
let assertWarning = makeWarningRunner(test);
16+
let assertNoWarning = makeNoWarningRunner(test);
1617

1718
assertRun(
1819
"record_1",
@@ -229,4 +230,30 @@ describe("records", ({test, testSkip}) => {
229230
"record Rec {foo: Number, bar: Number}; let a = {foo: 1, bar: 2}; let b = {...a, foo: 2, bar: 3}",
230231
Warnings.UselessRecordSpread,
231232
);
233+
234+
assertWarning(
235+
"disambiguation_1",
236+
{|
237+
record A { field: Number }
238+
record B { field: Number }
239+
x => x.field
240+
|},
241+
Warnings.AmbiguousName(["field"], ["B", "A"], false),
242+
);
243+
assertNoWarning(
244+
"disambiguation_2",
245+
{|
246+
record A { field: Number }
247+
record B { field: Number }
248+
(x: A) => x.field
249+
|},
250+
);
251+
assertNoWarning(
252+
"disambiguation_3",
253+
{|
254+
record A { field: Number }
255+
record B { field: Number }
256+
(x: B) => x.field
257+
|},
258+
);
232259
});

0 commit comments

Comments
 (0)