diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index e842227b3260f18f950f467e8400b85514c19608..c02569ed92eec2e8da7e1444ca216db19ce8933f 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2006-06-01  Per Bothner  <bothner@bothner.com>
+
+	Suppress extra '#1 <built-in> or '#1 <command line>' on -dD output.
+	* c-opts.c (finish_options): Use internal line 0 for <command-line>.
+	* c-ppoutput.c (cb_define): Don't increment line 0.
+
 2006-06-01  Pete Steinmetz  <steinmtz@us.ibm.com>
 
 	* doc/invoke.texi: Add cpu_type power6.
diff --git a/gcc/c-opts.c b/gcc/c-opts.c
index ea631b0530af7dc1550c748ad9ef6ef966f19ac8..2937b7995cd8670926b379e269ce9ffb4ceb160d 100644
--- a/gcc/c-opts.c
+++ b/gcc/c-opts.c
@@ -1373,7 +1373,10 @@ finish_options (void)
 	 their acceptance on the -std= setting.  */
       cpp_opts->warn_dollars = (cpp_opts->pedantic && !cpp_opts->c99);
 
-      cpp_change_file (parse_in, LC_RENAME, _("<command line>"));
+      cb_file_change (parse_in,
+		      linemap_add (&line_table, LC_RENAME, 0,
+				   _("<command-line>"), 0));
+
       for (i = 0; i < deferred_count; i++)
 	{
 	  struct deferred_opt *opt = &deferred_opts[i];
diff --git a/gcc/c-ppoutput.c b/gcc/c-ppoutput.c
index 2c4640cc460b5e6c1993f771de6e38994560e959..10540b7f1251faa61672f1ff4579c5d6d67ecf9d 100644
--- a/gcc/c-ppoutput.c
+++ b/gcc/c-ppoutput.c
@@ -324,7 +324,8 @@ cb_define (cpp_reader *pfile, source_location line, cpp_hashnode *node)
     fputs ((const char *) NODE_NAME (node), print.outf);
 
   putc ('\n', print.outf);
-  print.src_line++;
+  if (linemap_lookup (&line_table, line)->to_line != 0)
+    print.src_line++;
 }
 
 static void