PR debug/37156
authorjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 19 Aug 2008 11:44:42 +0000 (11:44 +0000)
committerjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 19 Aug 2008 11:44:42 +0000 (11:44 +0000)
* pretty-print.c (pp_base_format): Deal with recursive BLOCK trees.
* tree.c (block_nonartificial_location): Likewise.

* error.c (cp_print_error_function): Deal with recursive BLOCK trees.

* gcc.dg/pr37156.c: New test.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@139230 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/cp/ChangeLog
gcc/cp/error.c
gcc/pretty-print.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/pr37156.c [new file with mode: 0644]
gcc/tree.c

index 68e7be6..a170704 100644 (file)
@@ -1,3 +1,9 @@
+2008-08-19  Jakub Jelinek  <jakub@redhat.com>
+
+       PR debug/37156
+       * pretty-print.c (pp_base_format): Deal with recursive BLOCK trees.
+       * tree.c (block_nonartificial_location): Likewise.
+
 2008-08-19  Richard Guenther  <rguenther@suse.de>
 
        PR tree-optimization/35972
index a684338..4ffb96e 100644 (file)
@@ -1,3 +1,8 @@
+2008-08-19  Jakub Jelinek  <jakub@redhat.com>
+
+       PR debug/37156
+       * error.c (cp_print_error_function): Deal with recursive BLOCK trees.
+
 2008-08-18  Tomas Bily  <tbily@suse.cz>
 
        * tree.c (cp_tree_equal): Use CONVERT_EXPR_CODE_P.
index 03ceddf..177d082 100644 (file)
@@ -2388,7 +2388,9 @@ cp_print_error_function (diagnostic_context *context,
          if (abstract_origin)
            {
              ao = BLOCK_ABSTRACT_ORIGIN (abstract_origin);
-             while (TREE_CODE (ao) == BLOCK && BLOCK_ABSTRACT_ORIGIN (ao))
+             while (TREE_CODE (ao) == BLOCK
+                    && BLOCK_ABSTRACT_ORIGIN (ao)
+                    && BLOCK_ABSTRACT_ORIGIN (ao) != ao)
                ao = BLOCK_ABSTRACT_ORIGIN (ao);
              gcc_assert (TREE_CODE (ao) == FUNCTION_DECL);
              fndecl = ao;
index 35dca7c..fdac10e 100644 (file)
@@ -501,7 +501,9 @@ pp_base_format (pretty_printer *pp, text_info *text)
              {
                tree ao = BLOCK_ABSTRACT_ORIGIN (block);
 
-               while (TREE_CODE (ao) == BLOCK && BLOCK_ABSTRACT_ORIGIN (ao))
+               while (TREE_CODE (ao) == BLOCK
+                      && BLOCK_ABSTRACT_ORIGIN (ao)
+                      && BLOCK_ABSTRACT_ORIGIN (ao) != ao)
                  ao = BLOCK_ABSTRACT_ORIGIN (ao);
 
                if (TREE_CODE (ao) == FUNCTION_DECL)
index e51e9a6..7499840 100644 (file)
@@ -1,3 +1,8 @@
+2008-08-19  Jakub Jelinek  <jakub@redhat.com>
+
+       PR debug/37156
+       * gcc.dg/pr37156.c: New test.
+
 2008-08-19  Richard Guenther  <rguenther@suse.de>
 
        PR tree-optimization/35972
diff --git a/gcc/testsuite/gcc.dg/pr37156.c b/gcc/testsuite/gcc.dg/pr37156.c
new file mode 100644 (file)
index 0000000..e86f595
--- /dev/null
@@ -0,0 +1,21 @@
+/* PR debug/37156 */
+/* { dg-do compile } */
+/* { dg-options "-O2 -g" } */
+
+__attribute__ ((warning ("is experimental"))) int bar (int, int *, int *, int);
+
+long long foo (void)
+{
+  int n, m;
+  long long r;
+  bar (0, &n, &m, 0);  /* { dg-warning "is experimental" } */
+  r = (long long) n;
+  return r;
+}
+
+void
+baz (int n)
+{
+  int o;
+  o = foo () - n;
+}
index 4441bc0..95d4d5e 100644 (file)
@@ -8819,7 +8819,9 @@ block_nonartificial_location (tree block)
     {
       tree ao = BLOCK_ABSTRACT_ORIGIN (block);
 
-      while (TREE_CODE (ao) == BLOCK && BLOCK_ABSTRACT_ORIGIN (ao))
+      while (TREE_CODE (ao) == BLOCK
+            && BLOCK_ABSTRACT_ORIGIN (ao)
+            && BLOCK_ABSTRACT_ORIGIN (ao) != ao)
        ao = BLOCK_ABSTRACT_ORIGIN (ao);
 
       if (TREE_CODE (ao) == FUNCTION_DECL)