Skip to content

Commit 6875465

Browse files
committed
Set errorsReported while running isHidden and forcing message
1 parent 4d45087 commit 6875465

File tree

1 file changed

+14
-1
lines changed

1 file changed

+14
-1
lines changed

compiler/src/dotty/tools/dotc/reporting/Reporter.scala

+14-1
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,20 @@ abstract class Reporter extends interfaces.ReporterResult {
154154
val key = w.enablingOption.name
155155
addUnreported(key, 1)
156156
case _ =>
157-
if !isHidden(dia) then // avoid isHidden test for summarized warnings so that message is not forced
157+
val hide = if !errorsReported && dia.isInstanceOf[Error] then
158+
// We bump up errorCount so errorsReported is true while executing isHidden.
159+
// We use errorsReported as a predicate for broken code.
160+
// So now any code `isHidden` runs won't cause, for instance,
161+
// assertion errors and thus compiler crashes.
162+
// This normally amounts to forcing the message, which might run more code
163+
// to generate useful hints for the user.
164+
try
165+
_errorCount += 1
166+
isHidden(dia)
167+
finally
168+
_errorCount -= 1 // decrease rather than set back to `oldErrorCount` so we only ever decrease by 1
169+
else isHidden(dia)
170+
if !hide then // avoid isHidden test for summarized warnings so that message is not forced
158171
markReported(dia)
159172
withMode(Mode.Printing)(doReport(dia))
160173
dia match {

0 commit comments

Comments
 (0)