lovubuntu / checker-framework

Automatically exported from code.google.com/p/checker-framework
0 stars 0 forks source link

CF IndexOutOfBoundsException with Format Checker #285

Closed GoogleCodeExporter closed 9 years ago

GoogleCodeExporter commented 9 years ago
Run javac -processor checkers.formatter.FormatterChecker -AprintErrorStack with 
the following code: 

public class cfg {
    private void f() {
        for (String s : new String[] {"s"}) {} 
    }
}

It prints the following stacktrace:

error: SourceChecker.typeProcess: unexpected Throwable 
(IndexOutOfBoundsException) while processing cfg.java; message: Index: 0, Size: 
0
  Compilation unit: cfg.java
  Exception: java.lang.IndexOutOfBoundsException: Index: 0, Size: 0; Stack trace: com.sun.tools.javac.util.List.get(List.java:476)
  checkers.flow.CFTreeBuilder$AttributeCreator.visitArray(CFTreeBuilder.java:330)
  checkers.flow.CFTreeBuilder$AttributeCreator.visitArray(CFTreeBuilder.java:230)
  checkers.util.AnnotationBuilder$2.accept(AnnotationBuilder.java:494)
  checkers.flow.CFTreeBuilder.attributeFromAnnotationValue(CFTreeBuilder.java:227)
  checkers.flow.CFTreeBuilder.attributeFromAnnotationMirror(CFTreeBuilder.java:208)
  checkers.flow.CFTreeBuilder.AnnotatedType(CFTreeBuilder.java:70)
  checkers.flow.CFTreeBuilder.AnnotatedType(CFTreeBuilder.java:166)
  checkers.flow.CFTreeBuilder.buildAnnotatedType(CFTreeBuilder.java:53)
  checkers.flow.CFCFGBuilder$CFCFGTranslationPhaseOne.visitEnhancedForLoop(CFCFGBuilder.java:329)
  checkers.flow.CFCFGBuilder$CFCFGTranslationPhaseOne.visitEnhancedForLoop(CFCFGBuilder.java:101)
  com.sun.tools.javac.tree.JCTree$JCEnhancedForLoop.accept(JCTree.java:1037)
  com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:68)
  dataflow.cfg.CFGBuilder$CFGTranslationPhaseOne.visitBlock(CFGBuilder.java:3076)
  dataflow.cfg.CFGBuilder$CFGTranslationPhaseOne.visitBlock(CFGBuilder.java:1343)
  com.sun.tools.javac.tree.JCTree$JCBlock.accept(JCTree.java:912)
  com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:50)
  dataflow.cfg.CFGBuilder$CFGTranslationPhaseOne.process(CFGBuilder.java:1470)
  checkers.flow.CFCFGBuilder.run(CFCFGBuilder.java:92)
  checkers.types.GenericAnnotatedTypeFactory.analyze(GenericAnnotatedTypeFactory.java:644)
  checkers.types.GenericAnnotatedTypeFactory.performFlowAnalysis(GenericAnnotatedTypeFactory.java:596)
  checkers.types.GenericAnnotatedTypeFactory.annotateImplicitWithFlow(GenericAnnotatedTypeFactory.java:801)
  checkers.types.GenericAnnotatedTypeFactory.annotateImplicit(GenericAnnotatedTypeFactory.java:762)
  checkers.types.GenericAnnotatedTypeFactory.annotateImplicit(GenericAnnotatedTypeFactory.java:778)
  checkers.types.AnnotatedTypeFactory.getAnnotatedType(AnnotatedTypeFactory.java:548)
  checkers.types.AnnotatedTypeFactory.getAnnotatedType(AnnotatedTypeFactory.java:1497)
  checkers.basetype.BaseTypeVisitor.visitClass(BaseTypeVisitor.java:266)
  checkers.basetype.BaseTypeVisitor.visitClass(BaseTypeVisitor.java:154)
  com.sun.tools.javac.tree.JCTree$JCClassDecl.accept(JCTree.java:714)
  com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:50)
  checkers.source.SourceVisitor.visit(SourceVisitor.java:60)
  checkers.basetype.BaseTypeVisitor.visit(BaseTypeVisitor.java:236)
  checkers.basetype.BaseTypeVisitor.visit(BaseTypeVisitor.java:154)
  checkers.source.SourceChecker.typeProcess(SourceChecker.java:717)
  javacutils.AbstractTypeProcessor$AttributionTaskListener.finished(AbstractTypeProcessor.java:205)
  com.sun.tools.javac.api.ClientCodeWrapper$WrappedTaskListener.finished(ClientCodeWrapper.java:681)
  com.sun.tools.javac.api.MultiTaskListener.finished(MultiTaskListener.java:111)
  com.sun.tools.javac.main.JavaCompiler.flow(JavaCompiler.java:1344)
  com.sun.tools.javac.main.JavaCompiler.flow(JavaCompiler.java:1299)
  com.sun.tools.javac.main.JavaCompiler.compile2(JavaCompiler.java:904)
  com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:863)
  com.sun.tools.javac.main.Main.compile(Main.java:523)
  com.sun.tools.javac.main.Main.compile(Main.java:381)
  com.sun.tools.javac.main.Main.compile(Main.java:370)
  com.sun.tools.javac.main.Main.compile(Main.java:361)
  com.sun.tools.javac.Main.compile(Main.java:56)
  com.sun.tools.javac.Main.main(Main.java:42)
1 error

From the stacktrace, it looks like there is not Format checker specific code 
involved, but the bug does not appear with the Nullness or Regex checker. Does 
someone with a better understanding of the CF code know why this is happening?

Original issue reported on code.google.com by weitz...@cs.washington.edu on 1 Dec 2013 at 12:28

GoogleCodeExporter commented 9 years ago
Thanks for this bug report!
The CFG creation didn't correctly handle annotation attributes with empty 
arrays. I fixed this by using the type of the annotation method.

Original comment by wdi...@gmail.com on 10 Dec 2013 at 1:25

GoogleCodeExporter commented 9 years ago

Original comment by Jonathan...@gmail.com on 12 Dec 2013 at 4:42