From afd9aa9ea54dd3742ecd24644872d1004a051584 Mon Sep 17 00:00:00 2001 From: ebotcazou Date: Tue, 22 Apr 2014 16:16:25 +0000 Subject: [PATCH] * 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@209644 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ada/ChangeLog | 14 ++++++++++++++ gcc/ada/fe.h | 8 ++++---- gcc/ada/gcc-interface/decl.c | 6 ++++-- gcc/ada/gcc-interface/misc.c | 22 +++++++++++----------- gcc/ada/gcc-interface/trans.c | 17 ++++++++--------- gcc/ada/types.h | 13 ++++++++----- 6 files changed, 49 insertions(+), 31 deletions(-) diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 2e3dc5058f3..96bc09b9515 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,17 @@ +2014-04-22 Eric Botcazou + + * 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 Pierre-Marie de Rodat diff --git a/gcc/ada/fe.h b/gcc/ada/fe.h index d9fe48b5baa..518382041d9 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 7c3f7e5ea7b..0873bae706a 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 a5f2881d697..33db181e61a 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 3482d2ce39b..0e55f94c878 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 dd049db908a..268579ecefb 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: */ -- 2.11.4.GIT