Buggy code:
public static final DiagnosticType CANNOT_BIND_CTOR = DiagnosticType . warning ( "JSC_CANNOT_BIND_CTOR" , "We<seq2seq4repair_space>do<seq2seq4repair_space>not<seq2seq4repair_space>support<seq2seq4repair_space>using<seq2seq4repair_space>.bind<seq2seq4repair_space>on<seq2seq4repair_space>constructor<seq2seq4repair_space>functions." ) ; static final DiagnosticType GOOG_BIND_EXPECTS_FUNCTION = DiagnosticType . warning ( "JSC_GOOG_BIND_EXPECTS_FUNCTION" , "The<seq2seq4repair_space>first<seq2seq4repair_space>argument<seq2seq4repair_space>to<seq2seq4repair_space>goog.bind//goog.partial<seq2seq4repair_space>must<seq2seq4repair_space>be<seq2seq4repair_space>a<seq2seq4repair_space>function." ) ; static final DiagnosticGroup ALL_DIAGNOSTICS = new DiagnosticGroup ( NewTypeInference . ASSERT_FALSE , NewTypeInference . CALL_FUNCTION_WITH_BOTTOM_FORMAL , NewTypeInference . CANNOT_BIND_CTOR , NewTypeInference . CONST_REASSIGNED , NewTypeInference . CROSS_SCOPE_GOTCHA , NewTypeInference . FAILED_TO_UNIFY , NewTypeInference . FORIN_EXPECTS_OBJECT , NewTypeInference . FORIN_EXPECTS_STRING_KEY , NewTypeInference . GOOG_BIND_EXPECTS_FUNCTION , NewTypeInference . INVALID_ARGUMENT_TYPE , NewTypeInference . INVALID_INFERRED_RETURN_TYPE , NewTypeInference . INVALID_OBJLIT_PROPERTY_TYPE , NewTypeInference . INVALID_OPERAND_TYPE , NewTypeInference . INVALID_THIS_TYPE_IN_BIND , NewTypeInference . MISTYPED_ASSIGN_RHS , NewTypeInference . NON_NUMERIC_ARRAY_INDEX , NewTypeInference . NOT_A_CONSTRUCTOR , NewTypeInference . NOT_UNIQUE_INSTANTIATION , NewTypeInference . NULLABLE_DEREFERENCE , NewTypeInference . POSSIBLY_INEXISTENT_PROPERTY , NewTypeInference . PROPERTY_ACCESS_ON_NONOBJECT , NewTypeInference . RETURN_NONDECLARED_TYPE , NewTypeInference . UNKNOWN_ASSERTION_TYPE , CheckGlobalThis . GLOBAL_THIS , CheckMissingReturn . MISSING_RETURN_STATEMENT , TypeCheck . CONSTRUCTOR_NOT_CALLABLE , TypeCheck . ILLEGAL_OBJLIT_KEY , TypeCheck . ILLEGAL_PROPERTY_CREATION , TypeCheck . IN_USED_WITH_STRUCT , TypeCheck . INEXISTENT_PROPERTY , TypeCheck . NOT_CALLABLE , TypeCheck . WRONG_ARGUMENT_COUNT , TypeValidator . ILLEGAL_PROPERTY_ACCESS , TypeValidator . INVALID_CAST , TypeValidator . UNKNOWN_TYPEOF_VALUE ) ; private static String getFileWhereWarningOccurred ( JSError warning ) { } public static class WarningReporter { AbstractCompiler compiler ; WarningReporter ( AbstractCompiler compiler ) { } void add ( JSError warning ) { } } private NewTypeInference . WarningReporter warnings ; private final AbstractCompiler compiler ; private final CodingConvention convention ; private Map < DiGraphEdge < Node , ControlFlowGraph . Branch > , TypeEnv > envs ; private Map < Scope , JSType > summaries ; private Map < Node , NewTypeInference . DeferredCheck > deferredChecks ; private ControlFlowGraph < Node > cfg ; private Scope currentScope ; private GlobalTypeInfo symbolTable ; private JSTypes commonTypes ; private static final String RETVAL_ID = "%return" ; private static final String GETTER_PREFIX = "%getter_fun" ; private static final String SETTER_PREFIX = "%setter_fun" ; private final String ABSTRACT_METHOD_NAME ; private final Map < String , AssertionFunctionSpec > assertionFunctionsMap ; private static final QualifiedName NUMERIC_INDEX = new QualifiedName ( "0" ) ; private final boolean isClosurePassOn ; private static boolean showDebuggingPrints = false ; static boolean measureMem = false ; private static long peakMem = 0 ; NewTypeInference ( AbstractCompiler compiler , boolean isClosurePassOn ) { } @ VisibleForTesting public Scope processForTesting ( Node externs , Node root ) { } @ Override public void process ( Node externs , Node root ) { } static void updatePeakMem ( ) { } private boolean isArrayType ( JSType t ) { } private static void println ( Object ... objs ) { } private TypeEnv getInEnv ( DiGraphNode < Node , ControlFlowGraph . Branch > dn ) { } private TypeEnv getOutEnv ( DiGraphNode < Node , ControlFlowGraph . Branch > dn ) { } private TypeEnv setOutEnv ( DiGraphNode < Node , ControlFlowGraph . Branch > dn , TypeEnv e ) { } private TypeEnv setInEnv ( DiGraphNode < Node , ControlFlowGraph . Branch > dn , TypeEnv e ) { } private void initEdgeEnvsFwd ( TypeEnv entryEnv ) { } private TypeEnv getTypeEnvFromDeclaredTypes ( ) { } private JSType getSummaryOfLocalFunDef ( String name ) { } private void initEdgeEnvsBwd ( ) { } private void initEdgeEnvs ( TypeEnv env ) { } private JSType pickInitialType ( JSType declType ) { } private void buildWorkset ( DiGraphNode < Node , ControlFlowGraph . Branch > dn , List < DiGraphNode < Node , ControlFlowGraph . Branch > > workset ) { } private void buildWorksetHelper ( DiGraphNode < Node , ControlFlowGraph . Branch > dn , List < DiGraphNode < Node , ControlFlowGraph . Branch > > workset , Set < DiGraphNode < Node , ControlFlowGraph . Branch > > seen ) { } private void analyzeFunction ( Scope scope ) { } private void analyzeFunctionBwd ( List < DiGraphNode < Node , ControlFlowGraph . Branch > > workset ) { } private void analyzeFunctionFwd ( List < DiGraphNode < Node , ControlFlowGraph . Branch > > workset ) { } private void analyzeConditionalStmFwd ( DiGraphNode < Node , ControlFlowGraph . Branch > stm , Node cond , TypeEnv inEnv ) { } private void createSummary ( Scope fn ) { } private JSType getTypeAfterFwd ( String varName , TypeEnv entryEnv , TypeEnv exitEnv ) { } private static boolean isAllowedToNotReturn ( Scope methodScope ) { } private static boolean hasPathWithNoReturn ( ControlFlowGraph < Node > cfg ) { } private TypeEnv processVarDeclaration ( Node nameNode , TypeEnv inEnv ) { } private NewTypeInference . EnvTypePair analyzeExprFwd ( Node expr , TypeEnv inEnv ) { } private NewTypeInference . EnvTypePair analyzeExprFwd ( Node expr , TypeEnv inEnv , JSType requiredType ) { } private NewTypeInference . EnvTypePair analyzeExprFwd ( Node expr , TypeEnv inEnv , JSType requiredType , JSType specializedType ) { } private NewTypeInference . EnvTypePair analyzeNameFwd ( Node expr , TypeEnv inEnv , JSType requiredType , JSType specializedType ) { } private NewTypeInference . EnvTypePair analyzeLogicalOpFwd ( Node expr , TypeEnv inEnv , JSType requiredType , JSType specializedType ) { int exprKind = expr . getType ( ) ; Node lhs = expr . getFirstChild ( ) ; Node rhs = expr . getLastChild ( ) ; if ( ( ( specializedType . isTruthy ( ) ) && ( exprKind == ( Token . AND ) ) ) || ( ( specializedType . isFalsy ( ) ) && ( exprKind == ( Token . OR ) ) ) ) { NewTypeInference . EnvTypePair lhsPair = analyzeExprFwd ( lhs , inEnv , UNKNOWN , specializedType ) ; NewTypeInference . EnvTypePair rhsPair = analyzeExprFwd ( rhs , lhsPair . env , UNKNOWN , specializedType ) ; return rhsPair ; } else if ( ( ( specializedType . isFalsy ( ) ) && ( exprKind == ( Token . AND ) ) ) || ( ( specializedType . isTruthy ( ) ) && ( exprKind == ( Token . OR ) ) ) ) { NewTypeInference . EnvTypePair shortCircuitPair = analyzeExprFwd ( lhs , inEnv , UNKNOWN , specializedType ) ; NewTypeInference . EnvTypePair lhsPair = analyzeExprFwd ( lhs , inEnv , UNKNOWN , specializedType . negate ( ) ) ; NewTypeInference . EnvTypePair rhsPair = analyzeExprFwd ( rhs , lhsPair . env , UNKNOWN , specializedType ) ; return NewTypeInference . EnvTypePair . join ( rhsPair , shortCircuitPair ) ; } else { JSType stopAfterLhsType = ( exprKind == ( Token . AND ) ) ? JSType . FALSY : JSType . TRUTHY ; <START_BUG> NewTypeInference . EnvTypePair shortCircuitPair = analyzeExprFwd ( lhs , inEnv , requiredType , stopAfterLhsType ) ; <END_BUG>

Fix:
NewTypeInference . EnvTypePair shortCircuitPair = analyzeExprFwd ( lhs , inEnv , UNKNOWN , stopAfterLhsType ) ;