diff --git a/IPython/core/inputsplitter.py b/IPython/core/inputsplitter.py
index 9267770..c54f922 100644
--- a/IPython/core/inputsplitter.py
+++ b/IPython/core/inputsplitter.py
@@ -225,6 +225,13 @@ def split_blocks(python):
     # to put in a more sophisticated test.
     linenos = [x.lineno-1 for x in ast.node if x.lineno is not None]
 
+    # When we have a bare string as the first statement, it does not end up as
+    # a Discard Node in the AST as we might expect. Instead, it gets interpreted
+    # as the docstring of the module. Check for this case and prepend 0 (the
+    # first line number) to the list of linenos to account for it.
+    if ast.doc is not None:
+        linenos.insert(0, 0)
+
     # When we finally get the slices, we will need to slice all the way to
     # the end even though we don't have a line number for it. Fortunately,
     # None does the job nicely.
@@ -347,7 +354,7 @@ class InputSplitter(object):
         return out
 
     def push(self, lines):
-        """Push one ore more lines of input.
+        """Push one or more lines of input.
 
         This stores the given lines and returns a status code indicating
         whether the code forms a complete Python block or not.
diff --git a/IPython/core/tests/test_inputsplitter.py b/IPython/core/tests/test_inputsplitter.py
index adc0b4f..9ebc831 100644
--- a/IPython/core/tests/test_inputsplitter.py
+++ b/IPython/core/tests/test_inputsplitter.py
@@ -329,6 +329,15 @@ class InputSplitterTestCase(unittest.TestCase):
                        [['for i in range(10):'
                          '  x=i**2'],
                         ['z = 1']],
+
+                       [['"asdf"']],
+
+                       [['"asdf"'],
+                        ['10'],
+                       ],
+
+                       [['"""foo',
+                         'bar"""']],
                        ]
         for block_lines in all_blocks:
             self.check_split(block_lines)
