diff --git a/src/Compiler/Optimize/Optimizer.fs b/src/Compiler/Optimize/Optimizer.fs index 3cbb574598c..f0a94c66516 100644 --- a/src/Compiler/Optimize/Optimizer.fs +++ b/src/Compiler/Optimize/Optimizer.fs @@ -496,7 +496,7 @@ let rec IsPartialExprVal x = | SizeValue (_, a) -> IsPartialExprVal a let CheckInlineValueIsComplete (v: Val) res = - if v.ShouldInline && IsPartialExprVal res then + if v.ShouldInline && not v.IsMember && IsPartialExprVal res then errorR(Error(FSComp.SR.optValueMarkedInlineButIncomplete(v.DisplayName), v.Range)) //System.Diagnostics.Debug.Assert(false, sprintf "Break for incomplete inline value %s" v.DisplayName) diff --git a/tests/FSharp.Compiler.ComponentTests/Conformance/ObjectOrientedTypeDefinitions/ClassTypes/MemberDeclarations/MemberDeclarations.fs b/tests/FSharp.Compiler.ComponentTests/Conformance/ObjectOrientedTypeDefinitions/ClassTypes/MemberDeclarations/MemberDeclarations.fs index d69fb460957..03f225ee4d1 100644 --- a/tests/FSharp.Compiler.ComponentTests/Conformance/ObjectOrientedTypeDefinitions/ClassTypes/MemberDeclarations/MemberDeclarations.fs +++ b/tests/FSharp.Compiler.ComponentTests/Conformance/ObjectOrientedTypeDefinitions/ClassTypes/MemberDeclarations/MemberDeclarations.fs @@ -8,6 +8,25 @@ open FSharp.Test.Compiler module MemberDeclarations = + [] + let ``Inline member with class-scope self identifier should compile`` () = + FSharp """ +module Test + +type TestClass1() as SomeSelfIdentifier = + member inline AnotherSelfIdentifier.test() = 5 + +type TestClass2() as self = + member inline self.test() = 5 + +type TestClass3() as self = + member inline _.test() = 5 +""" + |> asLibrary + |> ignoreWarnings + |> compile + |> shouldSucceed + // Error tests []