aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Botcazou <ebotcazou@gcc.gnu.org>2012-03-25 17:11:33 +0000
committerEric Botcazou <ebotcazou@gcc.gnu.org>2012-03-25 17:11:33 +0000
commitd3cef56c989dca82d696678afb723dc79fbb1c30 (patch)
tree6ec6aa76ee94e248b4070213fa5454231c9ae999
parenta5695aa2c93dec00bfeb7eed1ff6d62858699ba7 (diff)
downloadgcc-d3cef56c989dca82d696678afb723dc79fbb1c30.zip
gcc-d3cef56c989dca82d696678afb723dc79fbb1c30.tar.gz
gcc-d3cef56c989dca82d696678afb723dc79fbb1c30.tar.bz2
decl.c (SS_MARK_NAME): New define.
* gcc-interface/decl.c (SS_MARK_NAME): New define. (gnat_to_gnu_entity) <E_Function>: Prepend leaf attribute on entities whose name is SS_MARK_NAME. From-SVN: r185780
-rw-r--r--gcc/ada/ChangeLog6
-rw-r--r--gcc/ada/gcc-interface/decl.c18
-rw-r--r--gcc/testsuite/ChangeLog6
-rw-r--r--gcc/testsuite/gnat.dg/concat2.adb18
-rw-r--r--gcc/testsuite/gnat.dg/concat2.ads8
5 files changed, 55 insertions, 1 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog
index efd3446..9a1f871 100644
--- a/gcc/ada/ChangeLog
+++ b/gcc/ada/ChangeLog
@@ -1,5 +1,11 @@
2012-03-25 Eric Botcazou <ebotcazou@adacore.com>
+ * gcc-interface/decl.c (SS_MARK_NAME): New define.
+ (gnat_to_gnu_entity) <E_Function>: Prepend leaf attribute on entities
+ whose name is SS_MARK_NAME.
+
+2012-03-25 Eric Botcazou <ebotcazou@adacore.com>
+
* gcc-interface/utils.c (add_parallel_type): Take a TYPE instead of a
DECL and adjust. Move around.
(has_parallel_type): New predicate.
diff --git a/gcc/ada/gcc-interface/decl.c b/gcc/ada/gcc-interface/decl.c
index 2139fbd..abd5185 100644
--- a/gcc/ada/gcc-interface/decl.c
+++ b/gcc/ada/gcc-interface/decl.c
@@ -81,6 +81,9 @@
#define FOREIGN_FORCE_REALIGN_STACK 0
#endif
+/* The (internal) name of the System.Secondary_Stack.SS_Mark function. */
+#define SS_MARK_NAME "system__secondary_stack__ss_mark"
+
struct incomplete
{
struct incomplete *next;
@@ -4405,6 +4408,21 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition)
get_identifier ("force_align_arg_pointer"), NULL_TREE,
gnat_entity);
+ /* ??? Declare System.Secondary_Stack.SS_Mark as leaf, in order to
+ avoid creating abnormal edges in SJLJ mode, which can break the
+ dominance relationship if there is a dynamic stack allocation.
+ We cannot do this in System.Secondary_Stack directly since it's
+ a compiler unit and this would introduce bootstrap path issues. */
+ if (IDENTIFIER_LENGTH (gnu_entity_name) == strlen (SS_MARK_NAME)
+ && IDENTIFIER_POINTER (gnu_entity_name)[0] == SS_MARK_NAME[0]
+ && IDENTIFIER_POINTER (gnu_entity_name)[1] == SS_MARK_NAME[1]
+ && IDENTIFIER_POINTER (gnu_entity_name)[2] == SS_MARK_NAME[2]
+ && gnu_entity_name == get_identifier (SS_MARK_NAME))
+ prepend_one_attribute_to
+ (&attr_list, ATTR_MACHINE_ATTRIBUTE,
+ get_identifier ("leaf"), NULL_TREE,
+ gnat_entity);
+
/* The lists have been built in reverse. */
gnu_param_list = nreverse (gnu_param_list);
if (has_stub)
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 9412052..b8c1c1b 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,4 +1,8 @@
-2012-03-21 Jason Merrill <jason@redhat.com>
+2012-03-25 Eric Botcazou <ebotcazou@adacore.com>
+
+ * gnat.dg/concat2.ad[sb]: New test.
+
+2012-03-24 Jason Merrill <jason@redhat.com>
* g++.dg/cpp0x/auto3.C: Compile with -pedantic-errors.
* g++.dg/cpp0x/trailing2.C: Likewise.
diff --git a/gcc/testsuite/gnat.dg/concat2.adb b/gcc/testsuite/gnat.dg/concat2.adb
new file mode 100644
index 0000000..221c4a3
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/concat2.adb
@@ -0,0 +1,18 @@
+with Text_IO; use Text_IO;
+
+package body Concat2 is
+
+ function Get_Param return String is
+ begin
+ return "";
+ end;
+
+ procedure Browse is
+ Mode : constant String := Get_Param;
+ Mode_Param : constant String := "MODE=" & Mode;
+ begin
+ Put_Line (Mode_Param);
+ end;
+
+end Concat2;
+
diff --git a/gcc/testsuite/gnat.dg/concat2.ads b/gcc/testsuite/gnat.dg/concat2.ads
new file mode 100644
index 0000000..01e620b
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/concat2.ads
@@ -0,0 +1,8 @@
+-- { dg-do compile }
+-- { dg-options "-O" }
+
+package Concat2 is
+
+ procedure Browse;
+
+end Concat2;