Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Scaladoc crashes due to cyclic reference when parsing java classfiles #15843

Closed
WojciechMazur opened this issue Aug 10, 2022 · 2 comments
Closed

Comments

@WojciechMazur
Copy link
Contributor

Compiler version

Every Scala 3 version
Fails with 3.2.0-RC3

Minimized code

Not yet minimized, can be reproduced using scala-cli

// test.scala
//> using lib "software.amazon.awssdk:s3:2.17.249"

import software.amazon.awssdk.services.s3.model.*

@main def Test =
  val request: HeadObjectRequest = HeadObjectRequest
      .builder()
      .build()
 
 // run using: scala-cli doc test.scala -S 3.nightly

Output (click arrow to expand)

exception caught when loading trait Builder: Cyclic reference involving object HeadObjectRequest
exception caught when loading module class HeadObjectRequest$: Cyclic reference involving object HeadObjectRequest
Cyclic reference involving object HeadObjectRequest while compiling /home/wmazur/projects/virtuslab/dotty/.scala-build/project_9a1f6e0edb_9a1f6e0edb-3a1a426571/classes/main/test$package.tasty, /home/wmazur/projects/virtuslab/dotty/.scala-build/project_9a1f6e0edb_9a1f6e0edb-3a1a426571/classes/main/Test.tasty
dotty.tools.dotc.core.CyclicReference: 
        at dotty.tools.dotc.core.CyclicReference$.apply(TypeErrors.scala:156)
        at dotty.tools.dotc.core.SymDenotations$SymDenotation.completeFrom(SymDenotations.scala:169)
        at dotty.tools.dotc.core.Denotations$Denotation.completeInfo$1(Denotations.scala:187)
        at dotty.tools.dotc.core.Denotations$Denotation.info(Denotations.scala:189)
        at dotty.tools.dotc.core.classfile.ClassfileParser$innerClasses$.getMember$1(ClassfileParser.scala:1088)
        at dotty.tools.dotc.core.classfile.ClassfileParser$innerClasses$.classSymbol(ClassfileParser.scala:1109)
        at dotty.tools.dotc.core.classfile.ClassfileParser.classNameToSymbol(ClassfileParser.scala:116)
        at dotty.tools.dotc.core.classfile.ClassfileParser.sig2type$1(ClassfileParser.scala:425)
        at dotty.tools.dotc.core.classfile.ClassfileParser.processTypeArgs$1(ClassfileParser.scala:412)
        at dotty.tools.dotc.core.classfile.ClassfileParser.sig2type$1(ClassfileParser.scala:427)
        at dotty.tools.dotc.core.classfile.ClassfileParser.dotty$tools$dotc$core$classfile$ClassfileParser$$sigToType(ClassfileParser.scala:551)
        at dotty.tools.dotc.core.classfile.ClassfileParser$AttributeCompleter.complete(ClassfileParser.scala:694)
        at dotty.tools.dotc.core.classfile.ClassfileParser.parseClass(ClassfileParser.scala:219)
        at dotty.tools.dotc.core.classfile.ClassfileParser.$anonfun$1(ClassfileParser.scala:87)
        at dotty.tools.dotc.core.classfile.ClassfileParser.run(ClassfileParser.scala:82)
        at dotty.tools.dotc.core.ClassfileLoader.load(SymbolLoaders.scala:411)
        at dotty.tools.dotc.core.ClassfileLoader.doComplete(SymbolLoaders.scala:406)
        at dotty.tools.dotc.core.SymbolLoader.complete(SymbolLoaders.scala:340)
        at dotty.tools.dotc.core.SymDenotations$SymDenotation.completeFrom(SymDenotations.scala:171)
        at dotty.tools.dotc.core.SymDenotations$SymDenotation.completeOnce(SymDenotations.scala:365)
        at dotty.tools.dotc.core.SymDenotations$SymDenotation.unforcedDecls(SymDenotations.scala:389)
        at dotty.tools.dotc.core.SymDenotations$ClassDenotation.typeParamsFromDecls(SymDenotations.scala:1796)
        at dotty.tools.dotc.core.SymDenotations$ClassDenotation.typeParams(SymDenotations.scala:1809)
        at dotty.tools.dotc.core.classfile.ClassfileParser$$anon$2.apply(ClassfileParser.scala:38)
        at dotty.tools.dotc.core.classfile.ClassfileParser$$anon$2.apply(ClassfileParser.scala:37)
        at scala.collection.immutable.List.mapConserve(List.scala:472)
        at dotty.tools.dotc.core.classfile.ClassfileParser$$anon$2.apply(ClassfileParser.scala:42)
        at dotty.tools.dotc.core.classfile.ClassfileParser$$anon$2.apply(ClassfileParser.scala:37)
        at scala.collection.immutable.List.mapConserve(List.scala:472)
        at dotty.tools.dotc.core.classfile.ClassfileParser$$anon$2.apply(ClassfileParser.scala:47)
        at dotty.tools.dotc.core.classfile.ClassfileParser$AttributeCompleter.complete(ClassfileParser.scala:720)
        at dotty.tools.dotc.core.classfile.ClassfileParser.parseClass(ClassfileParser.scala:219)
        at dotty.tools.dotc.core.classfile.ClassfileParser.$anonfun$1(ClassfileParser.scala:87)
        at dotty.tools.dotc.core.classfile.ClassfileParser.run(ClassfileParser.scala:82)
        at dotty.tools.dotc.core.ClassfileLoader.load(SymbolLoaders.scala:411)
        at dotty.tools.dotc.core.ClassfileLoader.doComplete(SymbolLoaders.scala:406)
        at dotty.tools.dotc.core.SymbolLoader$$anon$1.doComplete(SymbolLoaders.scala:325)
        at dotty.tools.dotc.core.SymbolLoader.complete(SymbolLoaders.scala:340)
        at dotty.tools.dotc.core.SymDenotations$SymDenotation.completeFrom(SymDenotations.scala:171)
        at dotty.tools.dotc.core.Denotations$Denotation.completeInfo$1(Denotations.scala:187)
        at dotty.tools.dotc.core.Denotations$Denotation.info(Denotations.scala:189)
        at dotty.tools.dotc.core.SymDenotations$SymDenotation.ensureCompleted(SymDenotations.scala:373)
        at dotty.tools.dotc.core.SymDenotations$SymDenotation.flags(SymDenotations.scala:64)
        at dotty.tools.dotc.core.SymDenotations$ModuleCompleter.complete(SymDenotations.scala:2696)
        at dotty.tools.dotc.core.SymDenotations$SymDenotation.completeFrom(SymDenotations.scala:171)
        at dotty.tools.dotc.core.Denotations$Denotation.completeInfo$1(Denotations.scala:187)
        at dotty.tools.dotc.core.Denotations$Denotation.info(Denotations.scala:189)
        at dotty.tools.dotc.core.SymDenotations$SymDenotation.ensureCompleted(SymDenotations.scala:373)
        at dotty.tools.dotc.core.SymDenotations$SymDenotation.flags(SymDenotations.scala:64)
        at dotty.tools.dotc.core.SymDenotations$SymDenotation.is(SymDenotations.scala:110)
        at dotty.tools.dotc.core.SymDenotations$SymDenotation.isStableMember(SymDenotations.scala:745)
        at dotty.tools.dotc.core.Types$Type.widenIfUnstable(Types.scala:1250)
        at dotty.tools.dotc.core.tasty.TreeUnpickler$TreeReader.readLengthTerm$1(TreeUnpickler.scala:1278)
        at dotty.tools.dotc.core.tasty.TreeUnpickler$TreeReader.readTerm(TreeUnpickler.scala:1373)
        at dotty.tools.dotc.core.tasty.TreeUnpickler$TreeReader.readLengthTerm$1(TreeUnpickler.scala:1210)
        at dotty.tools.dotc.core.tasty.TreeUnpickler$TreeReader.readTerm(TreeUnpickler.scala:1373)
        at dotty.tools.dotc.core.tasty.TreeUnpickler$TreeReader.readLengthTerm$1(TreeUnpickler.scala:1274)
        at dotty.tools.dotc.core.tasty.TreeUnpickler$TreeReader.readTerm(TreeUnpickler.scala:1373)
        at dotty.tools.dotc.core.tasty.TreeUnpickler$TreeReader.readLengthTerm$1(TreeUnpickler.scala:1210)
        at dotty.tools.dotc.core.tasty.TreeUnpickler$TreeReader.readTerm(TreeUnpickler.scala:1373)
        at dotty.tools.dotc.core.tasty.TreeUnpickler.readRhs$1$$anonfun$1$$anonfun$1(TreeUnpickler.scala:836)
        at dotty.tools.dotc.core.tasty.TreeUnpickler$LazyReader.complete(TreeUnpickler.scala:1510)
        at dotty.tools.dotc.ast.Trees$WithLazyField.forceIfLazy(Trees.scala:1029)
        at dotty.tools.dotc.ast.Trees$WithLazyField.forceIfLazy$(Trees.scala:1024)
        at dotty.tools.dotc.ast.Trees$ValOrDefDef.forceIfLazy(Trees.scala:418)
        at dotty.tools.dotc.ast.Trees$ValOrDefDef.rhs(Trees.scala:423)
        at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.foldOver(Trees.scala:1619)
        at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.traverseChildren(Trees.scala:1664)
        at dotty.tools.dotc.CompilationUnit$Force.traverse(CompilationUnit.scala:146)
        at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1663)
        at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1663)
        at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.fold$1(Trees.scala:1535)
        at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.apply(Trees.scala:1537)
        at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.foldOver(Trees.scala:1568)
        at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.traverseChildren(Trees.scala:1664)
        at dotty.tools.dotc.CompilationUnit$Force.traverse(CompilationUnit.scala:146)
        at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1663)
        at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1663)
        at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.foldOver(Trees.scala:1623)
        at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.traverseChildren(Trees.scala:1664)
        at dotty.tools.dotc.CompilationUnit$Force.traverse(CompilationUnit.scala:146)
        at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1663)
        at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1663)
        at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.fold$1(Trees.scala:1535)
        at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.apply(Trees.scala:1537)
        at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.foldOver(Trees.scala:1630)
        at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.traverseChildren(Trees.scala:1664)
        at dotty.tools.dotc.CompilationUnit$Force.traverse(CompilationUnit.scala:146)
        at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1663)
        at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1663)
        at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.foldOver(Trees.scala:1627)
        at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.traverseChildren(Trees.scala:1664)
        at dotty.tools.dotc.CompilationUnit$Force.traverse(CompilationUnit.scala:146)
        at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1663)
        at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1663)
        at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.fold$1(Trees.scala:1535)
        at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.apply(Trees.scala:1537)
        at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.foldOver(Trees.scala:1636)
        at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.foldOver(Trees.scala:1541)
        at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.traverseChildren(Trees.scala:1664)
        at dotty.tools.dotc.CompilationUnit$Force.traverse(CompilationUnit.scala:146)
        at dotty.tools.dotc.CompilationUnit$.apply(CompilationUnit.scala:111)
        at dotty.tools.dotc.CompilationUnit$.apply(CompilationUnit.scala:102)
        at dotty.tools.dotc.fromtasty.ReadTasty.compilationUnit$1(ReadTasty.scala:42)
        at dotty.tools.dotc.fromtasty.ReadTasty.readTASTY(ReadTasty.scala:70)
        at dotty.tools.dotc.fromtasty.ReadTasty.runOn$$anonfun$1(ReadTasty.scala:25)
        at scala.collection.immutable.List.flatMap(List.scala:293)
        at dotty.tools.dotc.fromtasty.ReadTasty.runOn(ReadTasty.scala:25)
        at dotty.tools.dotc.Run.runPhases$1$$anonfun$1(Run.scala:234)
        at scala.runtime.function.JProcedure1.apply(JProcedure1.java:15)
        at scala.runtime.function.JProcedure1.apply(JProcedure1.java:10)
        at scala.collection.ArrayOps$.foreach$extension(ArrayOps.scala:1328)
        at dotty.tools.dotc.Run.runPhases$1(Run.scala:245)
        at dotty.tools.dotc.Run.compileUnits$$anonfun$1(Run.scala:253)
        at dotty.tools.dotc.Run.compileUnits$$anonfun$adapted$1(Run.scala:262)
        at dotty.tools.dotc.util.Stats$.maybeMonitored(Stats.scala:68)
        at dotty.tools.dotc.Run.compileUnits(Run.scala:262)
        at dotty.tools.dotc.Run.compileUnits(Run.scala:192)
        at dotty.tools.dotc.fromtasty.TASTYRun.compile(TASTYRun.scala:14)
        at dotty.tools.dotc.Driver.doCompile(Driver.scala:35)
        at dotty.tools.dotc.Driver.process(Driver.scala:195)
        at scala.tasty.inspector.OldTastyInspector.inspectFilesInContext(OldTastyInspector.scala:72)
        at scala.tasty.inspector.OldTastyInspector.inspectFilesInContext$(OldTastyInspector.scala:22)
        at scala.tasty.inspector.DocTastyInspector.inspectFilesInContext(DocTastyInspector.scala:5)
        at dotty.tools.scaladoc.tasty.ScaladocTastyInspector.result(TastyParser.scala:147)
        at dotty.tools.scaladoc.ScalaModuleProvider$.mkModule(ScalaModuleProvider.scala:11)
        at dotty.tools.scaladoc.Scaladoc$.run(Scaladoc.scala:230)
        at dotty.tools.scaladoc.Scaladoc$.run$$anonfun$1(Scaladoc.scala:72)
        at scala.runtime.function.JProcedure1.apply(JProcedure1.java:15)
        at scala.runtime.function.JProcedure1.apply(JProcedure1.java:10)
        at scala.Option.map(Option.scala:242)
        at dotty.tools.scaladoc.Scaladoc$.run(Scaladoc.scala:76)
        at dotty.tools.scaladoc.Main.run(Main.scala:18)
        at dotty.tools.scaladoc.Main$.main(Main.scala:24)
        at dotty.tools.scaladoc.Main.main(Main.scala)
[error]  Scaladoc generation failed (exit code: 1)
@WojciechMazur WojciechMazur added itype:bug itype:crash stat:needs minimization Needs a self contained minimization stat:needs triage Every issue needs to have an "area" and "itype" label labels Aug 10, 2022
@griggt
Copy link
Contributor

griggt commented Aug 10, 2022

Looks like a duplicate of #15288

@KacperFKorban KacperFKorban added area:doctool and removed stat:needs triage Every issue needs to have an "area" and "itype" label labels Aug 11, 2022
@ckipp01
Copy link
Member

ckipp01 commented May 24, 2023

Testing this is no longer an issue and is closed as of #16882. Since the example here contains an external library and the original PR does have a test illustrating this I'll just go ahead and close this.

@ckipp01 ckipp01 closed this as completed May 24, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

4 participants