lovubuntu / checker-framework

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

crash in PolyCollector #355

Closed GoogleCodeExporter closed 9 years ago

GoogleCodeExporter commented 9 years ago
The following example triggers a crash in v1.8.5 of the checker:

=== Test.java ===
import java.util.List;

import org.checkerframework.checker.nullness.qual.Nullable;
import org.checkerframework.checker.nullness.qual.NonNull;

class Test {
  static <T extends @Nullable Object> @NonNull T checkNotNull(@Nullable T sample) {
    throw new RuntimeException();
  }

  void m(List<String> xs) {
    for (String x : checkNotNull(xs)) {
    }
  }
}
===

$ ~/jsr308/checker-framework-1.8.5/checker/bin/javac -AprintErrorStack 
-processor org.checkerframework.checker.nullness.NullnessChecker -cp 
~/jsr308/checker-framework-1.8.5/checker/dist/checker-qual.jar Test.java

error: SourceChecker.typeProcess: unexpected Throwable (AssertionError) while 
processing Test.java; message: PolyCollector: mismatched type kinds: 
@Initialized @NonNull List<E> (DECLARED) and @NonNull ? extends T extends 
@Initialized @Nullable Object (WILDCARD)
  Compilation unit: Test.java
  Exception: java.lang.AssertionError: PolyCollector: mismatched type kinds: @Initialized @NonNull List<E> (DECLARED) and @NonNull ? extends T extends @Initialized @Nullable Object (WILDCARD); Stack trace: org.checkerframework.framework.util.QualifierPolymorphism$PolyCollector.visitWildcard(QualifierPolymorphism.java:540)
  org.checkerframework.framework.util.QualifierPolymorphism$PolyCollector.visitWildcard(QualifierPolymorphism.java:277)
  org.checkerframework.framework.type.AnnotatedTypeMirror$AnnotatedWildcardType.accept(AnnotatedTypeMirror.java:2341)
  org.checkerframework.framework.type.visitor.SimpleAnnotatedTypeVisitor.visit(SimpleAnnotatedTypeVisitor.java:64)
  org.checkerframework.framework.util.QualifierPolymorphism.annotate(QualifierPolymorphism.java:193)
  org.checkerframework.framework.type.GenericAnnotatedTypeFactory.methodFromUse(GenericAnnotatedTypeFactory.java:874)
  org.checkerframework.checker.nullness.NullnessAnnotatedTypeFactory.methodFromUse(NullnessAnnotatedTypeFactory.java:235)
  org.checkerframework.framework.type.TypeFromTree$TypeFromExpression.visitMethodInvocation(TypeFromTree.java:260)
  org.checkerframework.framework.type.TypeFromTree$TypeFromExpression.visitMethodInvocation(TypeFromTree.java:104)
  com.sun.tools.javac.tree.JCTree$JCMethodInvocation.accept(JCTree.java:1511)
  com.sun.source.util.SimpleTreeVisitor.visit(SimpleTreeVisitor.java:53)
  org.checkerframework.framework.type.AnnotatedTypeFactory.fromTreeWithVisitor(AnnotatedTypeFactory.java:843)
  org.checkerframework.framework.type.AnnotatedTypeFactory.fromExpression(AnnotatedTypeFactory.java:765)
  org.checkerframework.framework.type.AnnotatedTypeFactory.getAnnotatedType(AnnotatedTypeFactory.java:575)
  org.checkerframework.framework.flow.CFCFGBuilder$CFCFGTranslationPhaseOne.visitEnhancedForLoop(CFCFGBuilder.java:196)
  org.checkerframework.framework.flow.CFCFGBuilder$CFCFGTranslationPhaseOne.visitEnhancedForLoop(CFCFGBuilder.java:99)
  com.sun.tools.javac.tree.JCTree$JCEnhancedForLoop.accept(JCTree.java:1077)
  com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:68)
  org.checkerframework.dataflow.cfg.CFGBuilder$CFGTranslationPhaseOne.visitBlock(CFGBuilder.java:3105)
  org.checkerframework.dataflow.cfg.CFGBuilder$CFGTranslationPhaseOne.visitBlock(CFGBuilder.java:1345)
  com.sun.tools.javac.tree.JCTree$JCBlock.accept(JCTree.java:952)
  com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:50)
  org.checkerframework.dataflow.cfg.CFGBuilder$CFGTranslationPhaseOne.process(CFGBuilder.java:1478)
  org.checkerframework.framework.flow.CFCFGBuilder.run(CFCFGBuilder.java:90)
  org.checkerframework.framework.type.GenericAnnotatedTypeFactory.analyze(GenericAnnotatedTypeFactory.java:638)
  org.checkerframework.framework.type.GenericAnnotatedTypeFactory.performFlowAnalysis(GenericAnnotatedTypeFactory.java:590)
  org.checkerframework.framework.type.GenericAnnotatedTypeFactory.checkAndPerformFlowAnalysis(GenericAnnotatedTypeFactory.java:807)
  org.checkerframework.framework.type.GenericAnnotatedTypeFactory.annotateImplicit(GenericAnnotatedTypeFactory.java:774)
  org.checkerframework.checker.nullness.NullnessAnnotatedTypeFactory.annotateImplicit(NullnessAnnotatedTypeFactory.java:163)
  org.checkerframework.framework.type.GenericAnnotatedTypeFactory.annotateImplicit(GenericAnnotatedTypeFactory.java:758)
  org.checkerframework.framework.type.AnnotatedTypeFactory.getAnnotatedType(AnnotatedTypeFactory.java:582)
  org.checkerframework.framework.type.AnnotatedTypeFactory.getAnnotatedType(AnnotatedTypeFactory.java:1652)
  org.checkerframework.checker.initialization.InitializationVisitor.visitClass(InitializationVisitor.java:291)
  org.checkerframework.checker.initialization.InitializationVisitor.visitClass(InitializationVisitor.java:57)
  com.sun.tools.javac.tree.JCTree$JCClassDecl.accept(JCTree.java:754)
  com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:50)
  org.checkerframework.framework.source.SourceVisitor.visit(SourceVisitor.java:70)
  org.checkerframework.framework.source.SourceChecker.typeProcess(SourceChecker.java:811)
  org.checkerframework.framework.source.AggregateChecker.typeProcess(AggregateChecker.java:123)
  org.checkerframework.javacutil.AbstractTypeProcessor$AttributionTaskListener.finished(AbstractTypeProcessor.java:205)
  com.sun.tools.javac.api.ClientCodeWrapper$WrappedTaskListener.finished(ClientCodeWrapper.java:625)
  com.sun.tools.javac.api.MultiTaskListener.finished(MultiTaskListener.java:110)
  com.sun.tools.javac.main.JavaCompiler.flow(JavaCompiler.java:1337)
  com.sun.tools.javac.main.JavaCompiler.flow(JavaCompiler.java:1287)
  com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:884)
  com.sun.tools.javac.main.Main.compile(Main.java:526)
  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

Original issue reported on code.google.com by cus...@google.com on 10 Sep 2014 at 5:10

GoogleCodeExporter commented 9 years ago
Thanks for the report! This has been fixed in our private typevar repository 
which we are hoping merge within a couple of releases.

Original comment by mcart...@cs.washington.edu on 22 Jan 2015 at 7:41

GoogleCodeExporter commented 9 years ago

Original comment by mcart...@cs.washington.edu on 23 Jan 2015 at 7:00

GoogleCodeExporter commented 9 years ago
This no longer crashes.  I have re-enabled its test.

Original comment by Jonathan...@gmail.com on 8 Apr 2015 at 10:39

GoogleCodeExporter commented 9 years ago

Original comment by jtha...@cs.washington.edu on 18 Apr 2015 at 6:42