re PR middle-end/47650 (wrong output of print_generic_decl() called from a plugin)
authorRichard Guenther <rguenther@suse.de>
Tue, 15 Mar 2011 13:39:28 +0000 (13:39 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Tue, 15 Mar 2011 13:39:28 +0000 (13:39 +0000)
2011-03-15  Richard Guenther  <rguenther@suse.de>

PR middle-end/47650
* tree-pretty-print.c (dump_function_declaration): Properly
dump unprototyped and varargs function types.

* gfortran.dg/c_f_pointer_tests_3.f90: Adjust.
* gfortran.dg/ishft_4.f90: Likewise.
* gfortran.dg/leadz_trailz_3.f90: Likewise.

From-SVN: r170995

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/c_f_pointer_tests_3.f90
gcc/testsuite/gfortran.dg/ishft_4.f90
gcc/testsuite/gfortran.dg/leadz_trailz_3.f90
gcc/tree-pretty-print.c

index dc5f897ca74077fe5086ec209ca1e3f0253958d9..d3f2eeffb7a2f94c6aeeeadd0423d32a4c0726ed 100644 (file)
@@ -1,3 +1,9 @@
+2011-03-15  Richard Guenther  <rguenther@suse.de>
+
+       PR middle-end/47650
+       * tree-pretty-print.c (dump_function_declaration): Properly
+       dump unprototyped and varargs function types.
+
 2011-03-15  Richard Guenther  <rguenther@suse.de>
 
        PR tree-optimization/13954
index 0257a77908ddf7ebcd0cadbee53dcafc3c1d2a61..753f90045b6803be1ad69650dbf914fb727ed985 100644 (file)
@@ -1,3 +1,10 @@
+2011-03-15  Richard Guenther  <rguenther@suse.de>
+
+       PR middle-end/47650
+       * gfortran.dg/c_f_pointer_tests_3.f90: Adjust.
+       * gfortran.dg/ishft_4.f90: Likewise.
+       * gfortran.dg/leadz_trailz_3.f90: Likewise.
+
 2011-03-15  Richard Guenther  <rguenther@suse.de>
 
        PR tree-optimization/13954
index 3b28f52b4e7a6a993bae7c1e43ead3ac55ff0aca..f7d6fa78eb425f8d0abc77c618d2235550a281fd 100644 (file)
@@ -30,6 +30,6 @@ end program test
 ! { dg-final { scan-tree-dump-times "  fptr = .integer.kind=4. .. cptr" 1 "original" } }
 !
 ! Check c_f_procpointer
-! { dg-final { scan-tree-dump-times "  fprocptr = .integer.kind=4. .\\*<.*>. .void.. cfunptr;" 1 "original" } }
+! { dg-final { scan-tree-dump-times "  fprocptr = .integer.kind=4. .\\*<.*>. ... cfunptr;" 1 "original" } }
 !
 ! { dg-final { cleanup-tree-dump "original" } }
index 4e2ad2b137f6acf1aa9404c8de8e6e0568eb0197..0315c7feb91ab048d72c07b4ece7c12171802587 100644 (file)
@@ -35,6 +35,6 @@ end program
 !   -- once in the function definition itself
 !   -- plus as many times as the function is called
 !
-! { dg-final { scan-tree-dump-times "foo *\\\(\\\)" 5 "original" } }
-! { dg-final { scan-tree-dump-times "bar *\\\(\\\)" 5 "original" } }
+! { dg-final { scan-tree-dump-times "foo *\\\(\\\)" 6 "original" } }
+! { dg-final { scan-tree-dump-times "bar *\\\(\\\)" 6 "original" } }
 ! { dg-final { cleanup-tree-dump "original" } }
index b54a11f63da5d51585a280d533e471d100042c43..f8466ffb95da501c884dd3c5199c2c7fe6203008 100644 (file)
@@ -26,5 +26,5 @@ end program
 !   -- once in the function definition itself
 !   -- plus as many times as the function is called
 !
-! { dg-final { scan-tree-dump-times "foo *\\\(\\\)" 7 "original" } }
+! { dg-final { scan-tree-dump-times "foo *\\\(\\\)" 8 "original" } }
 ! { dg-final { cleanup-tree-dump "original" } }
index 12ef38817eb9d00be758fbdefab01490346bb596..f2f5a220018285a558dc823c2a820314faa53cb5 100644 (file)
@@ -232,23 +232,27 @@ dump_function_declaration (pretty_printer *buffer, tree node,
   pp_space (buffer);
   pp_character (buffer, '(');
 
-  /* Print the argument types.  The last element in the list is a VOID_TYPE.
-     The following avoids printing the last element.  */
+  /* Print the argument types.  */
   arg = TYPE_ARG_TYPES (node);
-  while (arg && TREE_CHAIN (arg) && arg != error_mark_node)
+  while (arg && arg != void_list_node && arg != error_mark_node)
     {
-      wrote_arg = true;
-      dump_generic_node (buffer, TREE_VALUE (arg), spc, flags, false);
-      arg = TREE_CHAIN (arg);
-      if (TREE_CHAIN (arg) && TREE_CODE (TREE_CHAIN (arg)) == TREE_LIST)
+      if (wrote_arg)
        {
          pp_character (buffer, ',');
          pp_space (buffer);
        }
+      wrote_arg = true;
+      dump_generic_node (buffer, TREE_VALUE (arg), spc, flags, false);
+      arg = TREE_CHAIN (arg);
     }
 
-  if (!wrote_arg)
+  /* Drop the trailing void_type_node if we had any previous argument.  */
+  if (arg == void_list_node && !wrote_arg)
     pp_string (buffer, "void");
+  /* Properly dump vararg function types.  */
+  else if (!arg && wrote_arg)
+    pp_string (buffer, ", ...");
+  /* Avoid printing any arg for unprototyped functions.  */
 
   pp_character (buffer, ')');
 }