aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorEric Botcazou <ebotcazou@gcc.gnu.org>2013-09-06 15:28:02 +0000
committerEric Botcazou <ebotcazou@gcc.gnu.org>2013-09-06 15:28:02 +0000
commit2c641f8b3a3059353ac6f8798d10d2f5c611109b (patch)
treea2dc3968bfecca8999f0978eb3c9d4b7086dd505 /gcc
parenta81b0a3dbb7fa136464e2ce2d1e6702856791f9d (diff)
downloadgcc-2c641f8b3a3059353ac6f8798d10d2f5c611109b.zip
gcc-2c641f8b3a3059353ac6f8798d10d2f5c611109b.tar.gz
gcc-2c641f8b3a3059353ac6f8798d10d2f5c611109b.tar.bz2
toplev.c (output_stack_usage): Be prepared for suffixes created by the compiler in the function names.
* toplev.c (output_stack_usage): Be prepared for suffixes created by the compiler in the function names. From-SVN: r202339
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog9
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gnat.dg/stack_usage2.adb26
-rw-r--r--gcc/toplev.c31
4 files changed, 59 insertions, 11 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 21c36b6..cbaf4c4 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2013-09-06 Eric Botcazou <ebotcazou@adacore.com>
+
+ * toplev.c (output_stack_usage): Be prepared for suffixes created by
+ the compiler in the function names.
+
2013-09-06 Jan Hubicka <jh@suse.cz>
PR middle-end/58094
@@ -8,8 +13,8 @@
2013-09-06 Jan Hubicka <jh@suse.cz>
- * i386.c (ix86_hard_regno_mode_ok): AVX modes are valid only when
- AVX is enabled.
+ * config/i386/i386.c (ix86_hard_regno_mode_ok): AVX modes are valid
+ only when AVX is enabled.
2013-09-06 James Greenhalgh <james.greenhalgh@arm.com>
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 69a4af7..b51e5ce 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2013-09-06 Eric Botcazou <ebotcazou@adacore.com>
+
+ * gnat.dg/stack_usage2.adb: New test.
+
2013-09-06 James Greenhalgh <james.greenhalgh@arm.com>
* gcc.target/aarch64/table-intrinsics.c
diff --git a/gcc/testsuite/gnat.dg/stack_usage2.adb b/gcc/testsuite/gnat.dg/stack_usage2.adb
new file mode 100644
index 0000000..d458a92
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/stack_usage2.adb
@@ -0,0 +1,26 @@
+-- { dg-do compile }
+-- { dg-options "-O2 -fstack-usage" }
+
+with System;
+
+procedure Stack_Usage2 is
+
+ Sink : System.Address;
+ pragma Import (Ada, Sink);
+
+ procedure Transmit_Data (Branch : Integer) is
+ pragma No_Inline (Transmit_Data);
+ X : Integer;
+ begin
+ case Branch is
+ when 1 => Sink := X'Address;
+ when others => null;
+ end case;
+ end;
+
+begin
+ Transmit_Data (Branch => 1);
+end;
+
+-- { dg-final { scan-stack-usage-not ":Constprop" } }
+-- { dg-final { cleanup-stack-usage } }
diff --git a/gcc/toplev.c b/gcc/toplev.c
index 4d12bc9..3473211 100644
--- a/gcc/toplev.c
+++ b/gcc/toplev.c
@@ -1017,22 +1017,35 @@ output_stack_usage (void)
{
expanded_location loc
= expand_location (DECL_SOURCE_LOCATION (current_function_decl));
- const char *raw_id, *id;
-
- /* Strip the scope prefix if any. */
- raw_id = lang_hooks.decl_printable_name (current_function_decl, 2);
- id = strrchr (raw_id, '.');
- if (id)
- id++;
+ /* We don't want to print the full qualified name because it can be long,
+ so we strip the scope prefix, but we may need to deal with the suffix
+ created by the compiler. */
+ const char *suffix
+ = strchr (IDENTIFIER_POINTER (DECL_NAME (current_function_decl)), '.');
+ const char *name
+ = lang_hooks.decl_printable_name (current_function_decl, 2);
+ if (suffix)
+ {
+ const char *dot = strchr (name, '.');
+ while (dot && strcasecmp (dot, suffix) != 0)
+ {
+ name = dot + 1;
+ dot = strchr (name, '.');
+ }
+ }
else
- id = raw_id;
+ {
+ const char *dot = strrchr (name, '.');
+ if (dot)
+ name = dot + 1;
+ }
fprintf (stack_usage_file,
"%s:%d:%d:%s\t"HOST_WIDE_INT_PRINT_DEC"\t%s\n",
lbasename (loc.file),
loc.line,
loc.column,
- id,
+ name,
stack_usage,
stack_usage_kind_str[stack_usage_kind]);
}