Index: src/Parser/parser.yy
===================================================================
--- src/Parser/parser.yy	(revision 7bb516f9dde25f48bb6a37546feafba084354c29)
+++ src/Parser/parser.yy	(revision 2810700a9b044557e84a36b6419e2a7cf30534df)
@@ -1041,5 +1041,5 @@
 		// FIX ME: computes $1 twice
 	| logical_OR_expression '?' /* empty */ ':' conditional_expression // GCC, omitted first operand
-		{ $$ = new ExpressionNode( build_cond( yylloc, $1, $1->clone(), $4 ) ); }
+		{ $$ = new ExpressionNode( build_cond( yylloc, $1, nullptr, $4 ) ); }
 	;
 
Index: src/ResolvExpr/CandidateFinder.cpp
===================================================================
--- src/ResolvExpr/CandidateFinder.cpp	(revision 7bb516f9dde25f48bb6a37546feafba084354c29)
+++ src/ResolvExpr/CandidateFinder.cpp	(revision 2810700a9b044557e84a36b6419e2a7cf30534df)
@@ -1512,13 +1512,15 @@
 	void Finder::postvisit( const ast::ConditionalExpr * conditionalExpr ) {
 		// candidates for condition
+		ast::ptr<ast::Expr> arg1 = notZeroExpr( conditionalExpr->arg1 );
 		CandidateFinder finder1( context, tenv );
-		ast::ptr<ast::Expr> arg1 = notZeroExpr( conditionalExpr->arg1 );
 		finder1.find( arg1, ResolveMode::withAdjustment() );
 		if ( finder1.candidates.empty() ) return;
 
 		// candidates for true result
+		ast::Expr const * arg2 = conditionalExpr->arg2;
+		arg2 = arg2 ? arg2 : conditionalExpr->arg1.get();
 		CandidateFinder finder2( context, tenv );
 		finder2.allowVoid = true;
-		finder2.find( conditionalExpr->arg2, ResolveMode::withAdjustment() );
+		finder2.find( arg2, ResolveMode::withAdjustment() );
 		if ( finder2.candidates.empty() ) return;
 
