lovubuntu / checker-framework

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

Crash: Primitives and Objects Ternary Result #262

Closed GoogleCodeExporter closed 9 years ago

GoogleCodeExporter commented 9 years ago
What steps will reproduce the problem?
  1
  2 class TernaryObj {
  3
  4     // Reproduce error on CFGBuilder for promoting integer type.
  5     void test() {
  6         Object o = (true ? new Object() : 1);
  7     }
  8 }

What is the expected output? What do you see instead?
Program should not crash.

error: SourceChecker.typeProcess: unexpected Throwable (AssertionError) while 
processing ../../Generation/_tmp/fields/TernaryString.java; message: 
non-primitive type in widening conversion
  Compilation unit: ../../Generation/_tmp/fields/TernaryString.java
  Exception: java.lang.AssertionError: non-primitive type in widening conversion; Stack trace: dataflow.cfg.node.WideningConversionNode.<init>(WideningConversionNode.java:33)
  dataflow.cfg.CFGBuilder$CFGTranslationPhaseOne.binaryNumericPromotion(CFGBuilder.java:1888)
  dataflow.cfg.CFGBuilder$CFGTranslationPhaseOne.conditionalExprPromotion(CFGBuilder.java:2230)
  dataflow.cfg.CFGBuilder$CFGTranslationPhaseOne.visitConditionalExpression(CFGBuilder.java:3151)
  dataflow.cfg.CFGBuilder$CFGTranslationPhaseOne.visitConditionalExpression(CFGBuilder.java:1343)
  com.sun.tools.javac.tree.JCTree$JCConditional.accept(JCTree.java:1239)
  com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:68)
  dataflow.cfg.CFGBuilder$CFGTranslationPhaseOne.visitParenthesized(CFGBuilder.java:3532)
  dataflow.cfg.CFGBuilder$CFGTranslationPhaseOne.visitParenthesized(CFGBuilder.java:1343)
  com.sun.tools.javac.tree.JCTree$JCParens.accept(JCTree.java:1661)
  com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:68)
  dataflow.cfg.CFGBuilder$CFGTranslationPhaseOne.translateAssignment(CFGBuilder.java:2517)
  dataflow.cfg.CFGBuilder$CFGTranslationPhaseOne.visitVariable(CFGBuilder.java:3924)
  dataflow.cfg.CFGBuilder$CFGTranslationPhaseOne.visitVariable(CFGBuilder.java:1343)
  com.sun.tools.javac.tree.JCTree$JCVariableDecl.accept(JCTree.java:858)
  com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:68)
  dataflow.cfg.CFGBuilder$CFGTranslationPhaseOne.visitBlock(CFGBuilder.java:3066)
  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.AbstractBasicAnnotatedTypeFactory.analyze(AbstractBasicAnnotatedTypeFactory.java:588)
  checkers.types.AbstractBasicAnnotatedTypeFactory.performFlowAnalysis(AbstractBasicAnnotatedTypeFactory.java:550)
  checkers.types.AbstractBasicAnnotatedTypeFactory.annotateImplicitWithFlow(AbstractBasicAnnotatedTypeFactory.java:743)
  checkers.types.AbstractBasicAnnotatedTypeFactory.annotateImplicit(AbstractBasicAnnotatedTypeFactory.java:704)
  checkers.nullness.NullnessAnnotatedTypeFactory.annotateImplicit(NullnessAnnotatedTypeFactory.java:125)
  checkers.types.AbstractBasicAnnotatedTypeFactory.annotateImplicit(AbstractBasicAnnotatedTypeFactory.java:720)
  checkers.types.AnnotatedTypeFactory.getAnnotatedType(AnnotatedTypeFactory.java:342)
  checkers.types.AnnotatedTypeFactory.getAnnotatedType(AnnotatedTypeFactory.java:1291)
  checkers.initialization.InitializationVisitor.visitClass(InitializationVisitor.java:287)
  checkers.initialization.InitializationVisitor.visitClass(InitializationVisitor.java:60)
  com.sun.tools.javac.tree.JCTree$JCClassDecl.accept(JCTree.java:714)
  com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:50)
  checkers.source.SourceChecker.typeProcess(SourceChecker.java:721)
  checkers.source.AggregateChecker.typeProcess(AggregateChecker.java:119)
  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:1350)
  com.sun.tools.javac.main.JavaCompiler.flow(JavaCompiler.java:1305)
  com.sun.tools.javac.main.JavaCompiler.compile2(JavaCompiler.java:910)
  com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:869)
  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

What version of the product are you using? On what operating system?
$ javacheck -version
javac 1.8.0-jsr308-1.6.7
changeset:   7101:033adacc4165

Please provide any additional information below.
It looks like it fails trying to promote int to Object.  
CFGBuilder.conditionalExprPromotion

Original issue reported on code.google.com by mcart...@cs.washington.edu on 8 Oct 2013 at 10:02

GoogleCodeExporter commented 9 years ago
Fixed by commit e59452fc024d

Original comment by michael.ernst@gmail.com on 10 Oct 2013 at 2:22