Skip to content

StringIndexOutOfBoundsException in JavaParsers.scala #18490

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

Closed
vandmo opened this issue Aug 31, 2023 · 1 comment · Fixed by #18491
Closed

StringIndexOutOfBoundsException in JavaParsers.scala #18490

vandmo opened this issue Aug 31, 2023 · 1 comment · Fixed by #18491

Comments

@vandmo
Copy link

vandmo commented Aug 31, 2023

Compiler version

3.4.0-RC1-bin-20230828-5318d68-NIGHTLY (stacktrace)
Problem since at least 3.2.2. Verified that it exists in 3.3.0 as well.

Minimized code

public class X {

  public static final char X = '\0';

}

I hade to create a dummy scala file as well for the bug to kick in.

object X {}

Output (click arrow to expand)

## Exception when compiling 2 sources to XXXX
java.lang.StringIndexOutOfBoundsException: String index out of range: 0
java.base/java.lang.StringLatin1.charAt(StringLatin1.java:47)
java.base/java.lang.String.charAt(String.java:693)
dotty.tools.dotc.parsing.JavaParsers$JavaParser.tryConstant(JavaParsers.scala:1034)
dotty.tools.dotc.parsing.JavaParsers$JavaParser.optConstantTpe$1(JavaParsers.scala:726)
dotty.tools.dotc.parsing.JavaParsers$JavaParser.varDecl(JavaParsers.scala:733)
dotty.tools.dotc.parsing.JavaParsers$JavaParser.fieldDecls(JavaParsers.scala:665)
dotty.tools.dotc.parsing.JavaParsers$JavaParser.termDecl(JavaParsers.scala:647)
dotty.tools.dotc.parsing.JavaParsers$JavaParser.memberDecl(JavaParsers.scala:747)
dotty.tools.dotc.parsing.JavaParsers$JavaParser.typeBodyDecls(JavaParsers.scala:918)
dotty.tools.dotc.parsing.JavaParsers$JavaParser.typeBody(JavaParsers.scala:897)
dotty.tools.dotc.parsing.JavaParsers$JavaParser.classDecl(JavaParsers.scala:822)
dotty.tools.dotc.parsing.JavaParsers$JavaParser.typeDecl(JavaParsers.scala:1022)
dotty.tools.dotc.parsing.JavaParsers$JavaParser.compilationUnit(JavaParsers.scala:1076)
dotty.tools.dotc.parsing.JavaParsers$JavaParser.parse(JavaParsers.scala:44)
dotty.tools.dotc.parsing.Parser.parse$$anonfun$1(ParserPhase.scala:28)
dotty.tools.dotc.parsing.Parser.parse$$anonfun$adapted$1(ParserPhase.scala:40)
scala.Function0.apply$mcV$sp(Function0.scala:42)
dotty.tools.dotc.core.Phases$Phase.monitor(Phases.scala:440)
dotty.tools.dotc.parsing.Parser.parse(ParserPhase.scala:40)
dotty.tools.dotc.parsing.Parser.runOn$$anonfun$1(ParserPhase.scala:49)
scala.runtime.function.JProcedure1.apply(JProcedure1.java:15)
scala.runtime.function.JProcedure1.apply(JProcedure1.java:10)
scala.collection.immutable.List.foreach(List.scala:333)
dotty.tools.dotc.parsing.Parser.runOn(ParserPhase.scala:49)
dotty.tools.dotc.Run.runPhases$1$$anonfun$1(Run.scala:246)
scala.runtime.function.JProcedure1.apply(JProcedure1.java:15)
scala.runtime.function.JProcedure1.apply(JProcedure1.java:10)
scala.collection.ArrayOps$.foreach$extension(ArrayOps.scala:1321)
dotty.tools.dotc.Run.runPhases$1(Run.scala:262)
dotty.tools.dotc.Run.compileUnits$$anonfun$1(Run.scala:270)
dotty.tools.dotc.Run.compileUnits$$anonfun$adapted$1(Run.scala:279)
dotty.tools.dotc.util.Stats$.maybeMonitored(Stats.scala:71)
dotty.tools.dotc.Run.compileUnits(Run.scala:279)
dotty.tools.dotc.Run.compileSources(Run.scala:194)
dotty.tools.dotc.Run.compile(Run.scala:179)
dotty.tools.dotc.Driver.doCompile(Driver.scala:37)
dotty.tools.xsbt.CompilerBridgeDriver.run(CompilerBridgeDriver.java:136)
dotty.tools.xsbt.CompilerBridge.run(CompilerBridge.java:22)
sbt.internal.inc.AnalyzingCompiler.compile(AnalyzingCompiler.scala:91)
sbt.internal.inc.MixedAnalyzingCompiler.$anonfun$compile$7(MixedAnalyzingCompiler.scala:192)
scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.scala:18)
sbt.internal.inc.MixedAnalyzingCompiler.timed(MixedAnalyzingCompiler.scala:247)
sbt.internal.inc.MixedAnalyzingCompiler.$anonfun$compile$4(MixedAnalyzingCompiler.scala:182)
sbt.internal.inc.MixedAnalyzingCompiler.$anonfun$compile$4$adapted(MixedAnalyzingCompiler.scala:163)
sbt.internal.inc.JarUtils$.withPreviousJar(JarUtils.scala:239)
sbt.internal.inc.MixedAnalyzingCompiler.compileScala$1(MixedAnalyzingCompiler.scala:163)
sbt.internal.inc.MixedAnalyzingCompiler.compile(MixedAnalyzingCompiler.scala:210)
sbt.internal.inc.IncrementalCompilerImpl.$anonfun$compileInternal$1(IncrementalCompilerImpl.scala:528)
sbt.internal.inc.IncrementalCompilerImpl.$anonfun$compileInternal$1$adapted(IncrementalCompilerImpl.scala:528)
sbt.internal.inc.Incremental$.$anonfun$apply$5(Incremental.scala:177)
sbt.internal.inc.Incremental$.$anonfun$apply$5$adapted(Incremental.scala:175)
sbt.internal.inc.Incremental$$anon$2.run(Incremental.scala:461)
sbt.internal.inc.IncrementalCommon$CycleState.next(IncrementalCommon.scala:116)
sbt.internal.inc.IncrementalCommon$$anon$1.next(IncrementalCommon.scala:56)
sbt.internal.inc.IncrementalCommon$$anon$1.next(IncrementalCommon.scala:52)
sbt.internal.inc.IncrementalCommon.cycle(IncrementalCommon.scala:263)
sbt.internal.inc.Incremental$.$anonfun$incrementalCompile$8(Incremental.scala:416)
sbt.internal.inc.Incremental$.withClassfileManager(Incremental.scala:503)
sbt.internal.inc.Incremental$.incrementalCompile(Incremental.scala:403)
sbt.internal.inc.Incremental$.apply(Incremental.scala:169)
sbt.internal.inc.IncrementalCompilerImpl.compileInternal(IncrementalCompilerImpl.scala:528)
sbt.internal.inc.IncrementalCompilerImpl.$anonfun$compileIncrementally$1(IncrementalCompilerImpl.scala:482)
sbt.internal.inc.IncrementalCompilerImpl.handleCompilationError(IncrementalCompilerImpl.scala:332)
sbt.internal.inc.IncrementalCompilerImpl.compileIncrementally(IncrementalCompilerImpl.scala:420)
sbt.internal.inc.IncrementalCompilerImpl.compile(IncrementalCompilerImpl.scala:137)
org.gradle.api.internal.tasks.scala.ZincScalaCompiler.execute(ZincScalaCompiler.java:157)
org.gradle.api.internal.tasks.scala.ZincScalaCompilerFacade.execute(ZincScalaCompilerFacade.java:39)
org.gradle.api.internal.tasks.scala.ZincScalaCompilerFacade.execute(ZincScalaCompilerFacade.java:26)
org.gradle.api.internal.tasks.compile.daemon.AbstractIsolatedCompilerWorkerExecutor$CompilerWorkAction.execute(AbstractIsolatedCompilerWorkerExecutor.java:78)
org.gradle.workers.internal.DefaultWorkerServer.execute(DefaultWorkerServer.java:63)
org.gradle.workers.internal.AbstractClassLoaderWorker$1.create(AbstractClassLoaderWorker.java:54)
org.gradle.workers.internal.AbstractClassLoaderWorker$1.create(AbstractClassLoaderWorker.java:48)
org.gradle.internal.classloader.ClassLoaderUtils.executeInClassloader(ClassLoaderUtils.java:100)
org.gradle.workers.internal.AbstractClassLoaderWorker.executeInClassLoader(AbstractClassLoaderWorker.java:48)
org.gradle.workers.internal.IsolatedClassloaderWorker.run(IsolatedClassloaderWorker.java:49)
org.gradle.workers.internal.IsolatedClassloaderWorker.run(IsolatedClassloaderWorker.java:30)
org.gradle.workers.internal.WorkerDaemonServer.run(WorkerDaemonServer.java:96)
org.gradle.workers.internal.WorkerDaemonServer.run(WorkerDaemonServer.java:65)
org.gradle.process.internal.worker.request.WorkerAction$1.call(WorkerAction.java:138)
org.gradle.process.internal.worker.child.WorkerLogEventListener.withWorkerLoggingProtocol(WorkerLogEventListener.java:41)
org.gradle.process.internal.worker.request.WorkerAction.run(WorkerAction.java:135)
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
java.base/java.lang.reflect.Method.invoke(Method.java:566)
org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36)
org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:182)
org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:164)
org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:414)
org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:49)
java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
java.base/java.lang.Thread.run(Thread.java:829)
           

FAILURE: Build failed with an exception.
@vandmo vandmo added itype:bug itype:crash stat:needs triage Every issue needs to have an "area" and "itype" label labels Aug 31, 2023
@som-snytt
Copy link
Contributor

It reproduces with standalone scalac X.java. The scanner code is still close to Scala 2, which doesn't have the bug. I see a special case for value 0, so maybe that needs a tweak.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants