Skip to content

Commit 9c2bb4b

Browse files
authored
Fix some possibly buggy usage of UseDiagnosticsLogger (dotnet#16753)
1 parent a71a641 commit 9c2bb4b

File tree

2 files changed

+21
-15
lines changed

2 files changed

+21
-15
lines changed

src/Compiler/Driver/ParseAndCheckInputs.fs

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1389,15 +1389,17 @@ let DiagnosticsLoggerForInput (tcConfig: TcConfig, input: ParsedInput, oldLogger
13891389

13901390
/// Typecheck a single file (or interactive entry into F# Interactive)
13911391
let CheckOneInputEntry (ctok, checkForErrors, tcConfig: TcConfig, tcImports, tcGlobals, prefixPathOpt) tcState input =
1392-
// Equip loggers to locally filter w.r.t. scope pragmas in each input
1393-
use _ =
1394-
UseTransformedDiagnosticsLogger(fun oldLogger -> DiagnosticsLoggerForInput(tcConfig, input, oldLogger))
1392+
cancellable {
1393+
// Equip loggers to locally filter w.r.t. scope pragmas in each input
1394+
use _ =
1395+
UseTransformedDiagnosticsLogger(fun oldLogger -> DiagnosticsLoggerForInput(tcConfig, input, oldLogger))
13951396

1396-
use _ = UseBuildPhase BuildPhase.TypeCheck
1397+
use _ = UseBuildPhase BuildPhase.TypeCheck
13971398

1398-
RequireCompilationThread ctok
1399+
RequireCompilationThread ctok
13991400

1400-
CheckOneInput(checkForErrors, tcConfig, tcImports, tcGlobals, prefixPathOpt, TcResultsSink.NoSink, tcState, input)
1401+
return! CheckOneInput(checkForErrors, tcConfig, tcImports, tcGlobals, prefixPathOpt, TcResultsSink.NoSink, tcState, input)
1402+
}
14011403
|> Cancellable.runWithoutCancellation
14021404

14031405
/// Finish checking multiple files (or one interactive entry into F# Interactive)
@@ -1859,14 +1861,18 @@ let CheckMultipleInputsUsingGraphMode
18591861
((input, logger): ParsedInput * DiagnosticsLogger)
18601862
((currentTcState, _currentPriorErrors): State)
18611863
: Finisher<NodeToTypeCheck, State, PartialResult> =
1862-
use _ = UseDiagnosticsLogger logger
1863-
let checkForErrors2 () = priorErrors || (logger.ErrorCount > 0)
1864-
let tcSink = TcResultsSink.NoSink
18651864

18661865
let (Finisher(finisher = finisher)) =
1867-
CheckOneInputWithCallback
1868-
node
1869-
(checkForErrors2, tcConfig, tcImports, tcGlobals, prefixPathOpt, tcSink, currentTcState, input, false)
1866+
cancellable {
1867+
use _ = UseDiagnosticsLogger logger
1868+
let checkForErrors2 () = priorErrors || (logger.ErrorCount > 0)
1869+
let tcSink = TcResultsSink.NoSink
1870+
1871+
return!
1872+
CheckOneInputWithCallback
1873+
node
1874+
(checkForErrors2, tcConfig, tcImports, tcGlobals, prefixPathOpt, tcSink, currentTcState, input, false)
1875+
}
18701876
|> Cancellable.runWithoutCancellation
18711877

18721878
Finisher(

src/Compiler/Driver/fsc.fs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -525,7 +525,7 @@ let main1
525525
// Now install a delayed logger to hold all errors from flags until after all flags have been parsed (for example, --vserrors)
526526
let delayForFlagsLogger = CapturingDiagnosticsLogger("DelayFlagsLogger")
527527

528-
let _holder = UseDiagnosticsLogger delayForFlagsLogger
528+
SetThreadDiagnosticsLoggerNoUnwind delayForFlagsLogger
529529

530530
// Share intern'd strings across all lexing/parsing
531531
let lexResourceManager = Lexhelp.LexResourceManager()
@@ -596,7 +596,7 @@ let main1
596596
let diagnosticsLogger = diagnosticsLoggerProvider.CreateLogger(tcConfigB, exiter)
597597

598598
// Install the global error logger and never remove it. This logger does have all command-line flags considered.
599-
let _holder = UseDiagnosticsLogger diagnosticsLogger
599+
SetThreadDiagnosticsLoggerNoUnwind diagnosticsLogger
600600

601601
// Forward all errors from flags
602602
delayForFlagsLogger.CommitDelayedDiagnostics diagnosticsLogger
@@ -749,7 +749,7 @@ let main2
749749

750750
GetDiagnosticsLoggerFilteringByScopedPragmas(true, scopedPragmas, tcConfig.diagnosticsOptions, oldLogger)
751751

752-
let _holder = UseDiagnosticsLogger diagnosticsLogger
752+
SetThreadDiagnosticsLoggerNoUnwind diagnosticsLogger
753753

754754
// Try to find an AssemblyVersion attribute
755755
let assemVerFromAttrib =

0 commit comments

Comments
 (0)