Index: src/wp-includes/class-wp-query.php
===================================================================
--- src/wp-includes/class-wp-query.php	(revision 38584)
+++ src/wp-includes/class-wp-query.php	(working copy)
@@ -1494,7 +1494,7 @@
 		$allowed_keys = array(
 			'post_name', 'post_author', 'post_date', 'post_title', 'post_modified',
 			'post_parent', 'post_type', 'name', 'author', 'date', 'title', 'modified',
-			'parent', 'type', 'ID', 'menu_order', 'comment_count', 'rand',
+			'parent', 'type', 'ID', 'menu_order', 'comment_count', 'rand', 'post__in',
 		);
 
 		$primary_meta_key = '';
@@ -1552,6 +1552,11 @@
 			case 'meta_value_num':
 				$orderby_clause = "{$primary_meta_query['alias']}.meta_value+0";
 				break;
+			case 'post__in':
+				if( !empty( $this->query_vars['post__in'] ) ) {
+					$orderby_clause = "FIELD({$this->db->posts}.ID," . implode( ',', array_map( 'absint', $this->query_vars['post__in'] ) ) . ")";
+				}
+				break;
 			default:
 				if ( array_key_exists( $orderby, $meta_clauses ) ) {
 					// $orderby corresponds to a meta_query clause.
@@ -2143,8 +2148,6 @@
 			}
 		} elseif ( 'none' == $q['orderby'] ) {
 			$orderby = '';
-		} elseif ( $q['orderby'] == 'post__in' && ! empty( $post__in ) ) {
-			$orderby = "FIELD( {$this->db->posts}.ID, $post__in )";
 		} elseif ( $q['orderby'] == 'post_parent__in' && ! empty( $post_parent__in ) ) {
 			$orderby = "FIELD( {$this->db->posts}.post_parent, $post_parent__in )";
 		} elseif ( $q['orderby'] == 'post_name__in' && ! empty( $post_name__in ) ) {
