Skip to content

Commit 43e44bf

Browse files
committed
bugfix: Check if symbol exists before calling methods on it
Fixes #23374
1 parent 09d64c6 commit 43e44bf

File tree

1 file changed

+8
-8
lines changed

1 file changed

+8
-8
lines changed

compiler/src/dotty/tools/dotc/semanticdb/ExtractSemanticDB.scala

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -320,27 +320,27 @@ object ExtractSemanticDB:
320320
registerDefinition(tree.symbol, selectSpan(tree), Set.empty, tree.source)
321321
case tree => registerDefinition(tree.symbol, tree.span, Set.empty, tree.source)
322322
case tree: NamedDefTree =>
323-
if !tree.symbol.isAllOf(ModuleValCreationFlags) then
323+
if tree.symbol.exists && !tree.symbol.isAllOf(ModuleValCreationFlags) then
324324
tree match {
325-
case tree: ValDef if tree.symbol.isAllOf(EnumValue) =>
325+
case tree: ValDef if tree.symbol.exists && tree.symbol.isAllOf(EnumValue) =>
326326
tree.rhs match
327327
case Block(TypeDef(_, template: Template) :: _, _) => // simple case with specialised extends clause
328328
template.parents.filter(!_.span.isZeroExtent).foreach(traverse)
329329
case _ => // calls $new
330-
case tree: ValDef if tree.symbol.isSelfSym =>
330+
case tree: ValDef if tree.symbol.exists && tree.symbol.isSelfSym =>
331331
if tree.tpt.span.hasLength then
332332
traverse(tree.tpt)
333-
case tree: DefDef if tree.symbol.isConstructor => // ignore typeparams for secondary ctors
333+
case tree: DefDef if tree.symbol.exists && tree.symbol.isConstructor => // ignore typeparams for secondary ctors
334334
tree.trailingParamss.foreach(_.foreach(traverse))
335335
traverse(tree.rhs)
336-
case tree: (DefDef | ValDef) if tree.symbol.isSyntheticWithIdent =>
336+
case tree: (DefDef | ValDef) if tree.symbol.exists && tree.symbol.isSyntheticWithIdent =>
337337
tree match
338338
case tree: DefDef =>
339339
tree.paramss.foreach(_.foreach(param => registerSymbolSimple(param.symbol)))
340-
case tree: ValDef if tree.symbol.is(Given) =>
340+
case tree: ValDef if tree.symbol.exists && tree.symbol.is(Given) =>
341341
traverse(tree.tpt)
342342
case _ =>
343-
if !tree.symbol.isGlobal then
343+
if tree.symbol.exists && !tree.symbol.isGlobal then
344344
localBodies(tree.symbol) = tree.rhs
345345
// ignore rhs
346346

@@ -379,7 +379,7 @@ object ExtractSemanticDB:
379379
traverseAnnotsOfDefinition(ctorSym)
380380
ctorParams(tree.constr.termParamss, tree.constr.leadingTypeParams, tree.body)
381381
registerDefinition(ctorSym, tree.constr.nameSpan.startPos, Set.empty, tree.source)
382-
case tree: Apply =>
382+
case tree: Apply if tree.fun.symbol.exists =>
383383
@tu lazy val genParamSymbol: Name => String = tree.fun.symbol.funParamSymbol
384384
traverse(tree.fun)
385385
synth.tryFindSynthetic(tree).foreach(synthetics.addOne)

0 commit comments

Comments
 (0)