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
Original issue reported on code.google.com by
mcart...@cs.washington.edu
on 8 Oct 2013 at 10:02