aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ada/ChangeLog14
-rw-r--r--gcc/ada/fe.h8
-rw-r--r--gcc/ada/gcc-interface/decl.c6
-rw-r--r--gcc/ada/gcc-interface/misc.c22
-rw-r--r--gcc/ada/gcc-interface/trans.c17
-rw-r--r--gcc/ada/types.h13
6 files changed, 49 insertions, 31 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog
index 2e3dc50..96bc09b 100644
--- a/gcc/ada/ChangeLog
+++ b/gcc/ada/ChangeLog
@@ -1,3 +1,17 @@
+2014-04-22 Eric Botcazou <ebotcazou@adacore.com>
+
+ * fe.h (Compiler_Abort): Replace Fat_Pointer with String_Pointer.
+ (Error_Msg_N): Likewise.
+ (Error_Msg_NE): Likewise.
+ (Get_External_Name_With_Suffix): Likewise.
+ * types.h (Fat_Pointer): Delete.
+ (String_Pointer): New type.
+ (DECLARE_STRING_POINTER): New macro.
+ * gcc-interface/decl.c (create_concat_name): Adjust.
+ * gcc-interface/trans.c (post_error): Likewise.
+ (post_error_ne): Likewise.
+ * gcc-interface/misc.c (internal_error_function): Likewise.
+
2014-04-15 Eric Botcazou <ebotcazou@adacore.com>
Pierre-Marie de Rodat <derodat@adacore.com>
diff --git a/gcc/ada/fe.h b/gcc/ada/fe.h
index d9fe48b..5183820 100644
--- a/gcc/ada/fe.h
+++ b/gcc/ada/fe.h
@@ -39,7 +39,7 @@ extern "C" {
/* comperr: */
#define Compiler_Abort comperr__compiler_abort
-extern int Compiler_Abort (Fat_Pointer, int, Fat_Pointer) ATTRIBUTE_NORETURN;
+extern int Compiler_Abort (String_Pointer, int, String_Pointer) ATTRIBUTE_NORETURN;
/* csets: */
@@ -90,8 +90,8 @@ extern Node_Id Get_Attribute_Definition_Clause (Entity_Id, char);
#define Error_Msg_NE errout__error_msg_ne
#define Set_Identifier_Casing errout__set_identifier_casing
-extern void Error_Msg_N (Fat_Pointer, Node_Id);
-extern void Error_Msg_NE (Fat_Pointer, Node_Id, Entity_Id);
+extern void Error_Msg_N (String_Pointer, Node_Id);
+extern void Error_Msg_NE (String_Pointer, Node_Id, Entity_Id);
extern void Set_Identifier_Casing (Char *, const Char *);
/* err_vars: */
@@ -151,7 +151,7 @@ extern void Setup_Asm_Outputs (Node_Id);
extern void Get_Encoded_Name (Entity_Id);
extern void Get_External_Name (Entity_Id, Boolean);
-extern void Get_External_Name_With_Suffix (Entity_Id, Fat_Pointer);
+extern void Get_External_Name_With_Suffix (Entity_Id, String_Pointer);
/* exp_util: */
diff --git a/gcc/ada/gcc-interface/decl.c b/gcc/ada/gcc-interface/decl.c
index 7c3f7e5..0873bae 100644
--- a/gcc/ada/gcc-interface/decl.c
+++ b/gcc/ada/gcc-interface/decl.c
@@ -8861,8 +8861,10 @@ create_concat_name (Entity_Id gnat_entity, const char *suffix)
if (suffix)
{
String_Template temp = {1, (int) strlen (suffix)};
- Fat_Pointer fp = {suffix, &temp};
- Get_External_Name_With_Suffix (gnat_entity, fp);
+ DECLARE_STRING_POINTER (sp);
+ sp.Bounds = &temp;
+ sp.Array = suffix;
+ Get_External_Name_With_Suffix (gnat_entity, sp);
}
else
Get_External_Name (gnat_entity, 0);
diff --git a/gcc/ada/gcc-interface/misc.c b/gcc/ada/gcc-interface/misc.c
index a5f2881..33db181 100644
--- a/gcc/ada/gcc-interface/misc.c
+++ b/gcc/ada/gcc-interface/misc.c
@@ -283,8 +283,8 @@ internal_error_function (diagnostic_context *context,
text_info tinfo;
char *buffer, *p, *loc;
String_Template temp, temp_loc;
- Fat_Pointer fp, fp_loc;
- expanded_location s;
+ DECLARE_STRING_POINTER (sp, sp_loc);
+ expanded_location xloc;
/* Warn if plugins present. */
warn_if_plugins ();
@@ -311,21 +311,21 @@ internal_error_function (diagnostic_context *context,
temp.Low_Bound = 1;
temp.High_Bound = p - buffer;
- fp.Bounds = &temp;
- fp.Array = buffer;
+ sp.Bounds = &temp;
+ sp.Array = buffer;
- s = expand_location (input_location);
- if (context->show_column && s.column != 0)
- asprintf (&loc, "%s:%d:%d", s.file, s.line, s.column);
+ xloc = expand_location (input_location);
+ if (context->show_column && xloc.column != 0)
+ asprintf (&loc, "%s:%d:%d", xloc.file, xloc.line, xloc.column);
else
- asprintf (&loc, "%s:%d", s.file, s.line);
+ asprintf (&loc, "%s:%d", xloc.file, xloc.line);
temp_loc.Low_Bound = 1;
temp_loc.High_Bound = strlen (loc);
- fp_loc.Bounds = &temp_loc;
- fp_loc.Array = loc;
+ sp_loc.Bounds = &temp_loc;
+ sp_loc.Array = loc;
Current_Error_Node = error_gnat_node;
- Compiler_Abort (fp, -1, fp_loc);
+ Compiler_Abort (sp, -1, sp_loc);
}
/* Perform all the initialization steps that are language-specific. */
diff --git a/gcc/ada/gcc-interface/trans.c b/gcc/ada/gcc-interface/trans.c
index 3482d2c..0e55f94 100644
--- a/gcc/ada/gcc-interface/trans.c
+++ b/gcc/ada/gcc-interface/trans.c
@@ -7833,7 +7833,6 @@ gnat_gimplify_stmt (tree *stmt_p)
gnu_cond = build2 (ANNOTATE_EXPR, TREE_TYPE (gnu_cond), gnu_cond,
build_int_cst (integer_type_node,
annot_expr_ivdep_kind));
-
if (LOOP_STMT_NO_VECTOR (stmt))
gnu_cond = build2 (ANNOTATE_EXPR, TREE_TYPE (gnu_cond), gnu_cond,
build_int_cst (integer_type_node,
@@ -9357,16 +9356,16 @@ void
post_error (const char *msg, Node_Id node)
{
String_Template temp;
- Fat_Pointer fp;
+ DECLARE_STRING_POINTER (sp);
if (No (node))
return;
temp.Low_Bound = 1;
temp.High_Bound = strlen (msg);
- fp.Bounds = &temp;
- fp.Array = msg;
- Error_Msg_N (fp, node);
+ sp.Bounds = &temp;
+ sp.Array = msg;
+ Error_Msg_N (sp, node);
}
/* Similar to post_error, but NODE is the node at which to post the error and
@@ -9376,16 +9375,16 @@ void
post_error_ne (const char *msg, Node_Id node, Entity_Id ent)
{
String_Template temp;
- Fat_Pointer fp;
+ DECLARE_STRING_POINTER (sp);
if (No (node))
return;
temp.Low_Bound = 1;
temp.High_Bound = strlen (msg);
- fp.Bounds = &temp;
- fp.Array = msg;
- Error_Msg_NE (fp, node, ent);
+ sp.Bounds = &temp;
+ sp.Array = msg;
+ Error_Msg_NE (sp, node, ent);
}
/* Similar to post_error_ne, but NUM is the number to use for the '^'. */
diff --git a/gcc/ada/types.h b/gcc/ada/types.h
index dd049db..268579e 100644
--- a/gcc/ada/types.h
+++ b/gcc/ada/types.h
@@ -76,11 +76,14 @@ typedef Char *Str;
/* Pointer to string of Chars */
typedef Char *Str_Ptr;
-/* Types for the fat pointer used for strings and the template it
- points to. */
-typedef struct {int Low_Bound, High_Bound; } String_Template;
-typedef struct {const char *Array; String_Template *Bounds; }
- __attribute ((aligned (sizeof (char *) * 2))) Fat_Pointer;
+/* Types for the fat pointer used for strings and the template it points to.
+ On most platforms the fat pointer is naturally aligned but, on the rest,
+ it is given twice the natural alignment. For maximum portability, we do
+ not overalign the type but only the objects. */
+typedef struct { int Low_Bound, High_Bound; } String_Template;
+typedef struct { const char *Array; String_Template *Bounds; } String_Pointer;
+#define DECLARE_STRING_POINTER(...) \
+ __attribute__ ((aligned (sizeof (char *) * 2))) String_Pointer __VA_ARGS__
/* Types for Node/Entity Kinds: */