diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index dcc99a04bfa955f83d3ac3cb7d3136038eae79dc..e20b3f635e00341fb6c639d8298871fd2fa468fc 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2011-11-26  Nathan Sidwell  <nathan@acm.org>
+
+	PR gcov-profile/51297
+	* gcov.c (main): Allocate initial names and sources arrays.
+	(find_source): Don't check for null name or source arrays here.
+
 2011-11-26  Jakub Jelinek  <jakub@redhat.com>
 
 	PR rtl-optimization/49912
diff --git a/gcc/gcov.c b/gcc/gcov.c
index c5cc0efdf1a98443a322103bafaf9e704f01c8ba..29907a311e37907449942b5b268a6d183b53414f 100644
--- a/gcc/gcov.c
+++ b/gcc/gcov.c
@@ -406,6 +406,11 @@ main (int argc, char **argv)
   /* Handle response files.  */
   expandargv (&argc, &argv);
 
+  a_names = 10;
+  names = XNEWVEC (name_map_t, a_names);
+  a_sources = 10;
+  sources = XNEWVEC (source_t, a_sources);
+  
   argno = process_args (argc, argv);
   if (optind == argc)
     print_usage (true);
@@ -874,8 +879,6 @@ find_source (const char *file_name)
     {
       /* Extend the name map array -- we'll be inserting one or two
 	 entries.  */
-      if (!a_names)
-	a_names = 10;
       a_names *= 2;
       name_map = XNEWVEC (name_map_t, a_names);
       memcpy (name_map, names, n_names * sizeof (*names));
@@ -894,8 +897,6 @@ find_source (const char *file_name)
       
       if (n_sources == a_sources)
 	{
-	  if (!a_sources)
-	    a_sources = 10;
 	  a_sources *= 2;
 	  src = XNEWVEC (source_t, a_sources);
 	  memcpy (src, sources, n_sources * sizeof (*sources));