Skip to content

Commit 6a8a9be

Browse files
committed
Hiding an (old) warning in a new situation behind a new lang feature
1 parent 4cd05dc commit 6a8a9be

20 files changed

+107
-14
lines changed

src/Compiler/Checking/CheckExpressions.fs

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2205,28 +2205,31 @@ module GeneralizationHelpers =
22052205
//-------------------------------------------------------------------------
22062206

22072207
let ComputeInlineFlag (memFlagsOption: SynMemberFlags option) isInline isMutable g attrs m =
2208-
let hasNoCompilerInliningAttribute() = HasFSharpAttribute g g.attrib_NoCompilerInliningAttribute attrs
2209-
let enforceNoInlining() = hasNoCompilerInliningAttribute() || HasMethodImplNoInliningAttribute g attrs
2210-
2211-
let inlineFlag =
2212-
let isCtorOrAbstractSlot =
2213-
match memFlagsOption with
2214-
| None -> false
2215-
| Some x -> (x.MemberKind = SynMemberKind.Constructor) || x.IsDispatchSlot || x.IsOverrideOrExplicitImpl
2208+
let hasNoCompilerInliningAttribute() = HasFSharpAttribute g g.attrib_NoCompilerInliningAttribute attrs
2209+
let isCtorOrAbstractSlot() =
2210+
match memFlagsOption with
2211+
| None -> false
2212+
| Some x -> (x.MemberKind = SynMemberKind.Constructor) || x.IsDispatchSlot || x.IsOverrideOrExplicitImpl
22162213

2214+
let inlineFlag, reportIncorrectInlineKeywordUsage =
22172215
// Mutable values may never be inlined
22182216
// Constructors may never be inlined
22192217
// Calls to virtual/abstract slots may never be inlined
2220-
// Values marked with NoCompilerInliningAttribute may never be inlined
2221-
if isMutable || isCtorOrAbstractSlot || enforceNoInlining() then
2222-
ValInline.Never
2218+
// Values marked with NoCompilerInliningAttribute or [<MethodImpl(MethodImplOptions.NoInlining)>] may never be inlined
2219+
if isMutable || isCtorOrAbstractSlot() || hasNoCompilerInliningAttribute() then
2220+
ValInline.Never, errorR
2221+
elif HasMethodImplNoInliningAttribute g attrs then
2222+
ValInline.Never,
2223+
if g.langVersion.SupportsFeature LanguageFeature.WarningWhenInliningMethodImplNoInlineMarkedFunction
2224+
then warning
2225+
else ignore
22232226
elif isInline then
2224-
ValInline.Always
2227+
ValInline.Always, ignore
22252228
else
2226-
ValInline.Optional
2229+
ValInline.Optional, ignore
22272230

22282231
if isInline && (inlineFlag <> ValInline.Always) then
2229-
errorR(Error(FSComp.SR.tcThisValueMayNotBeInlined(), m))
2232+
reportIncorrectInlineKeywordUsage (Error(FSComp.SR.tcThisValueMayNotBeInlined(), m))
22302233

22312234
inlineFlag
22322235

src/Compiler/FSComp.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1558,6 +1558,7 @@ featureLowercaseDUWhenRequireQualifiedAccess,"Allow lowercase DU when RequireQua
15581558
featureMatchNotAllowedForUnionCaseWithNoData,"Pattern match discard is not allowed for union case that takes no data."
15591559
featureCSharpExtensionAttributeNotRequired,"Allow implicit Extension attribute on declaring types, modules"
15601560
featureErrorForNonVirtualMembersOverrides,"Raises errors for non-virtual members overrides"
1561+
featureWarningWhenInliningMethodImplNoInlineMarkedFunction,"Raises warnings when 'let inline ... =' is used together with [<MethodImpl(MethodImplOptions.NoInlining)>] attribute. Function is not getting inlined."
15611562
3353,fsiInvalidDirective,"Invalid directive '#%s %s'"
15621563
3354,tcNotAFunctionButIndexerNamedIndexingNotYetEnabled,"This value supports indexing, e.g. '%s.[index]'. The syntax '%s[index]' requires /langversion:preview. See https://aka.ms/fsharp-index-notation."
15631564
3354,tcNotAFunctionButIndexerIndexingNotYetEnabled,"This expression supports indexing, e.g. 'expr.[index]'. The syntax 'expr[index]' requires /langversion:preview. See https://aka.ms/fsharp-index-notation."

src/Compiler/Facilities/LanguageFeatures.fs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ type LanguageFeature =
5757
| MatchNotAllowedForUnionCaseWithNoData
5858
| CSharpExtensionAttributeNotRequired
5959
| ErrorForNonVirtualMembersOverrides
60+
| WarningWhenInliningMethodImplNoInlineMarkedFunction
6061

6162
/// LanguageVersion management
6263
type LanguageVersion(versionText) =
@@ -130,6 +131,7 @@ type LanguageVersion(versionText) =
130131
LanguageFeature.MatchNotAllowedForUnionCaseWithNoData, previewVersion
131132
LanguageFeature.CSharpExtensionAttributeNotRequired, previewVersion
132133
LanguageFeature.ErrorForNonVirtualMembersOverrides, previewVersion
134+
LanguageFeature.WarningWhenInliningMethodImplNoInlineMarkedFunction, previewVersion
133135

134136
]
135137

@@ -240,6 +242,7 @@ type LanguageVersion(versionText) =
240242
| LanguageFeature.MatchNotAllowedForUnionCaseWithNoData -> FSComp.SR.featureMatchNotAllowedForUnionCaseWithNoData ()
241243
| LanguageFeature.CSharpExtensionAttributeNotRequired -> FSComp.SR.featureCSharpExtensionAttributeNotRequired ()
242244
| LanguageFeature.ErrorForNonVirtualMembersOverrides -> FSComp.SR.featureErrorForNonVirtualMembersOverrides ()
245+
| LanguageFeature.WarningWhenInliningMethodImplNoInlineMarkedFunction -> FSComp.SR.featureWarningWhenInliningMethodImplNoInlineMarkedFunction ()
243246

244247
/// Get a version string associated with the given feature.
245248
static member GetFeatureVersionString feature =

src/Compiler/Facilities/LanguageFeatures.fsi

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ type LanguageFeature =
4747
| MatchNotAllowedForUnionCaseWithNoData
4848
| CSharpExtensionAttributeNotRequired
4949
| ErrorForNonVirtualMembersOverrides
50+
| WarningWhenInliningMethodImplNoInlineMarkedFunction
5051

5152
/// LanguageVersion management
5253
type LanguageVersion =

src/Compiler/xlf/FSComp.txt.cs.xlf

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -327,6 +327,11 @@
327327
<target state="translated">reprezentace struktury aktivních vzorů</target>
328328
<note />
329329
</trans-unit>
330+
<trans-unit id="featureWarningWhenInliningMethodImplNoInlineMarkedFunction">
331+
<source>Raises warnings when 'let inline ... =' is used together with [&lt;MethodImpl(MethodImplOptions.NoInlining)&gt;] attribute. Function is not getting inlined.</source>
332+
<target state="new">Raises warnings when 'let inline ... =' is used together with [&lt;MethodImpl(MethodImplOptions.NoInlining)&gt;] attribute. Function is not getting inlined.</target>
333+
<note />
334+
</trans-unit>
330335
<trans-unit id="featureWildCardInForLoop">
331336
<source>wild card in for loop</source>
332337
<target state="translated">zástupný znak ve smyčce for</target>

src/Compiler/xlf/FSComp.txt.de.xlf

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -327,6 +327,11 @@
327327
<target state="translated">Strukturdarstellung für aktive Muster</target>
328328
<note />
329329
</trans-unit>
330+
<trans-unit id="featureWarningWhenInliningMethodImplNoInlineMarkedFunction">
331+
<source>Raises warnings when 'let inline ... =' is used together with [&lt;MethodImpl(MethodImplOptions.NoInlining)&gt;] attribute. Function is not getting inlined.</source>
332+
<target state="new">Raises warnings when 'let inline ... =' is used together with [&lt;MethodImpl(MethodImplOptions.NoInlining)&gt;] attribute. Function is not getting inlined.</target>
333+
<note />
334+
</trans-unit>
330335
<trans-unit id="featureWildCardInForLoop">
331336
<source>wild card in for loop</source>
332337
<target state="translated">Platzhalter in for-Schleife</target>

src/Compiler/xlf/FSComp.txt.es.xlf

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -327,6 +327,11 @@
327327
<target state="translated">representación de struct para modelos activos</target>
328328
<note />
329329
</trans-unit>
330+
<trans-unit id="featureWarningWhenInliningMethodImplNoInlineMarkedFunction">
331+
<source>Raises warnings when 'let inline ... =' is used together with [&lt;MethodImpl(MethodImplOptions.NoInlining)&gt;] attribute. Function is not getting inlined.</source>
332+
<target state="new">Raises warnings when 'let inline ... =' is used together with [&lt;MethodImpl(MethodImplOptions.NoInlining)&gt;] attribute. Function is not getting inlined.</target>
333+
<note />
334+
</trans-unit>
330335
<trans-unit id="featureWildCardInForLoop">
331336
<source>wild card in for loop</source>
332337
<target state="translated">carácter comodín en bucle for</target>

src/Compiler/xlf/FSComp.txt.fr.xlf

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -327,6 +327,11 @@
327327
<target state="translated">représentation de structure pour les modèles actifs</target>
328328
<note />
329329
</trans-unit>
330+
<trans-unit id="featureWarningWhenInliningMethodImplNoInlineMarkedFunction">
331+
<source>Raises warnings when 'let inline ... =' is used together with [&lt;MethodImpl(MethodImplOptions.NoInlining)&gt;] attribute. Function is not getting inlined.</source>
332+
<target state="new">Raises warnings when 'let inline ... =' is used together with [&lt;MethodImpl(MethodImplOptions.NoInlining)&gt;] attribute. Function is not getting inlined.</target>
333+
<note />
334+
</trans-unit>
330335
<trans-unit id="featureWildCardInForLoop">
331336
<source>wild card in for loop</source>
332337
<target state="translated">caractère générique dans une boucle for</target>

src/Compiler/xlf/FSComp.txt.it.xlf

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -327,6 +327,11 @@
327327
<target state="translated">rappresentazione struct per criteri attivi</target>
328328
<note />
329329
</trans-unit>
330+
<trans-unit id="featureWarningWhenInliningMethodImplNoInlineMarkedFunction">
331+
<source>Raises warnings when 'let inline ... =' is used together with [&lt;MethodImpl(MethodImplOptions.NoInlining)&gt;] attribute. Function is not getting inlined.</source>
332+
<target state="new">Raises warnings when 'let inline ... =' is used together with [&lt;MethodImpl(MethodImplOptions.NoInlining)&gt;] attribute. Function is not getting inlined.</target>
333+
<note />
334+
</trans-unit>
330335
<trans-unit id="featureWildCardInForLoop">
331336
<source>wild card in for loop</source>
332337
<target state="translated">carattere jolly nel ciclo for</target>

src/Compiler/xlf/FSComp.txt.ja.xlf

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -327,6 +327,11 @@
327327
<target state="translated">アクティブなパターンの構造体表現</target>
328328
<note />
329329
</trans-unit>
330+
<trans-unit id="featureWarningWhenInliningMethodImplNoInlineMarkedFunction">
331+
<source>Raises warnings when 'let inline ... =' is used together with [&lt;MethodImpl(MethodImplOptions.NoInlining)&gt;] attribute. Function is not getting inlined.</source>
332+
<target state="new">Raises warnings when 'let inline ... =' is used together with [&lt;MethodImpl(MethodImplOptions.NoInlining)&gt;] attribute. Function is not getting inlined.</target>
333+
<note />
334+
</trans-unit>
330335
<trans-unit id="featureWildCardInForLoop">
331336
<source>wild card in for loop</source>
332337
<target state="translated">for ループのワイルド カード</target>

0 commit comments

Comments
 (0)