diff options
author | Eric Botcazou <ebotcazou@gcc.gnu.org> | 2013-09-06 15:28:02 +0000 |
---|---|---|
committer | Eric Botcazou <ebotcazou@gcc.gnu.org> | 2013-09-06 15:28:02 +0000 |
commit | 2c641f8b3a3059353ac6f8798d10d2f5c611109b (patch) | |
tree | a2dc3968bfecca8999f0978eb3c9d4b7086dd505 /gcc | |
parent | a81b0a3dbb7fa136464e2ce2d1e6702856791f9d (diff) | |
download | gcc-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/ChangeLog | 9 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/gnat.dg/stack_usage2.adb | 26 | ||||
-rw-r--r-- | gcc/toplev.c | 31 |
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]); } |