diff --git a/ghc/compiler/parser/hsparser.y b/ghc/compiler/parser/hsparser.y
index 8a691fdcaf37e65d69af2c308ea92af6713c4bab..30bfa6f2b7bbb45e3c20b16d38f7bedc28e94d16 100644
--- a/ghc/compiler/parser/hsparser.y
+++ b/ghc/compiler/parser/hsparser.y
@@ -555,6 +555,8 @@ callconv: STDCALL 	{ $$ = CALLCONV_STDCALL;  }
 	| C_CALL        { $$ = CALLCONV_CCALL;    }
 	| PASCAL        { $$ = CALLCONV_PASCAL;   }
 	| FASTCALL      { $$ = CALLCONV_FASTCALL; }
+/* If you leave out the specification of a calling convention, you'll get C's. */
+        | /*empty*/     { $$ = CALLCONV_CCALL;    }
 	;
 
 ext_name: STRING	{ $$ = mkjust(lsing($1)); }
diff --git a/ghc/compiler/reader/ReadPrefix.lhs b/ghc/compiler/reader/ReadPrefix.lhs
index 33ef93b7c0e31d81166bf36e6eecef2ae58aabda..8024e08f60669e9d4309fdcd22ddc44d382a66aa 100644
--- a/ghc/compiler/reader/ReadPrefix.lhs
+++ b/ghc/compiler/reader/ReadPrefix.lhs
@@ -608,7 +608,7 @@ wlkBinding binding
 	  wlkHsType ty				   `thenUgn` \ h_ty ->
 	  wlkExtName ext_name			   `thenUgn` \ h_ext_name ->
 	  rdCallConv cconv		           `thenUgn` \ h_cconv ->
-	  rdImpExp imp_exp (cvFlag unsafe_flag)    `thenUgn` \ h_imp_exp ->
+	  rdForKind imp_exp (cvFlag unsafe_flag)    `thenUgn` \ h_imp_exp ->
  	  returnUgn (RdrForeignDecl (ForeignDecl h_id h_imp_exp h_ty h_ext_name h_cconv src_loc))
 
       a_sig_we_hope ->
@@ -967,8 +967,9 @@ rdCallConv x = returnUgn x
 rdForKind :: Int -> Bool -> UgnM ForKind
 rdForKind 0 isUnsafe = -- foreign import
   returnUgn (FoImport isUnsafe)
-rdImpExp 1 _ = -- foreign export
+rdForKind 1 _ = -- foreign export
   returnUgn FoExport
-rdImpExp 2 _ = -- foreign label
+rdForKind 2 _ = -- foreign label
   returnUgn FoLabel
+
 \end{code}