diff --git a/compiler/src/typed/typecore.re b/compiler/src/typed/typecore.re index 7bfad9bdf..ca04f13d5 100644 --- a/compiler/src/typed/typecore.re +++ b/compiler/src/typed/typecore.re @@ -2592,7 +2592,7 @@ and type_label_access = (env, srecord, lid) => { let opath = try({ let (p0, p, _) = extract_concrete_record(env, ty_exp); - Some((p0, p, repr(ty_exp).level == generic_level)); + Some((p0, p, true)); }) { | Not_found => None }; diff --git a/compiler/test/suites/records.re b/compiler/test/suites/records.re index c5e85b83d..d320dec93 100644 --- a/compiler/test/suites/records.re +++ b/compiler/test/suites/records.re @@ -13,6 +13,7 @@ describe("records", ({test, testSkip}) => { let assertCompileError = makeCompileErrorRunner(test); let assertRun = makeRunner(test_or_skip); let assertWarning = makeWarningRunner(test); + let assertNoWarning = makeNoWarningRunner(test); assertRun( "record_1", @@ -229,4 +230,30 @@ describe("records", ({test, testSkip}) => { "record Rec {foo: Number, bar: Number}; let a = {foo: 1, bar: 2}; let b = {...a, foo: 2, bar: 3}", Warnings.UselessRecordSpread, ); + + assertWarning( + "disambiguation_1", + {| + record A { field: Number } + record B { field: Number } + x => x.field + |}, + Warnings.AmbiguousName(["field"], ["B", "A"], false), + ); + assertNoWarning( + "disambiguation_2", + {| + record A { field: Number } + record B { field: Number } + (x: A) => x.field + |}, + ); + assertNoWarning( + "disambiguation_3", + {| + record A { field: Number } + record B { field: Number } + (x: B) => x.field + |}, + ); });