Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
R
riscv-gcc-1
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
lvzhengyang
riscv-gcc-1
Commits
47625858
Commit
47625858
authored
Feb 06, 2013
by
Arnaud Charlet
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Revert previous change, unintended.
From-SVN: r195805
parent
a44bbd48
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
68 additions
and
256 deletions
+68
-256
gcc/ada/gcc-interface/ada-tree.h
+7
-1
gcc/ada/gcc-interface/decl.c
+19
-69
gcc/ada/gcc-interface/gigi.h
+3
-15
gcc/ada/gcc-interface/trans.c
+32
-148
gcc/ada/gcc-interface/utils.c
+7
-23
No files found.
gcc/ada/gcc-interface/ada-tree.h
View file @
47625858
...
...
@@ -6,7 +6,7 @@
* *
* C Header File *
* *
* Copyright (C) 1992-201
2
, Free Software Foundation, Inc. *
* Copyright (C) 1992-201
3
, Free Software Foundation, Inc. *
* *
* GNAT is free software; you can redistribute it and/or modify it under *
* terms of the GNU General Public License as published by the Free Soft- *
...
...
@@ -507,5 +507,11 @@ do { \
#define LOOP_STMT_BOTTOM_COND_P(NODE) TREE_LANG_FLAG_0 (LOOP_STMT_CHECK (NODE))
#define LOOP_STMT_TOP_UPDATE_P(NODE) TREE_LANG_FLAG_1 (LOOP_STMT_CHECK (NODE))
/* Optimization hints on loops. */
#define LOOP_STMT_NO_UNROLL(NODE) TREE_LANG_FLAG_2 (LOOP_STMT_CHECK (NODE))
#define LOOP_STMT_UNROLL(NODE) TREE_LANG_FLAG_3 (LOOP_STMT_CHECK (NODE))
#define LOOP_STMT_NO_VECTOR(NODE) TREE_LANG_FLAG_4 (LOOP_STMT_CHECK (NODE))
#define LOOP_STMT_VECTOR(NODE) TREE_LANG_FLAG_5 (LOOP_STMT_CHECK (NODE))
#define EXIT_STMT_COND(NODE) TREE_OPERAND_CHECK_CODE (NODE, EXIT_STMT, 0)
#define EXIT_STMT_LABEL(NODE) TREE_OPERAND_CHECK_CODE (NODE, EXIT_STMT, 1)
gcc/ada/gcc-interface/decl.c
View file @
47625858
...
...
@@ -2908,12 +2908,10 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition)
{
Node_Id
full_definition
=
Declaration_Node
(
gnat_entity
);
Node_Id
record_definition
=
Type_Definition
(
full_definition
);
Node_Id
gnat_constr
;
Entity_Id
gnat_field
;
tree
gnu_field
,
gnu_field_list
=
NULL_TREE
;
tree
gnu_get_parent
;
tree
gnu_field
,
gnu_field_list
=
NULL_TREE
,
gnu_get_parent
;
/* Set PACKED in keeping with gnat_to_gnu_field. */
const
int
packed
int
packed
=
Is_Packed
(
gnat_entity
)
?
1
:
Component_Alignment
(
gnat_entity
)
==
Calign_Storage_Unit
...
...
@@ -2923,13 +2921,13 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition)
&&
Known_RM_Size
(
gnat_entity
)))
?
-
2
:
0
;
const
bool
has_discr
=
Has_Discriminants
(
gnat_entity
);
const
bool
has_rep
=
Has_Specified_Layout
(
gnat_entity
);
const
bool
is_extension
bool
has_discr
=
Has_Discriminants
(
gnat_entity
);
bool
has_rep
=
Has_Specified_Layout
(
gnat_entity
);
bool
all_rep
=
has_rep
;
bool
is_extension
=
(
Is_Tagged_Type
(
gnat_entity
)
&&
Nkind
(
record_definition
)
==
N_Derived_Type_Definition
);
const
bool
is_unchecked_union
=
Is_Unchecked_Union
(
gnat_entity
);
bool
all_rep
=
has_rep
;
bool
is_unchecked_union
=
Is_Unchecked_Union
(
gnat_entity
);
/* See if all fields have a rep clause. Stop when we find one
that doesn't. */
...
...
@@ -3168,51 +3166,6 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition)
}
}
/* If we have a derived untagged type that renames discriminants in
the root type, the (stored) discriminants are a just copy of the
discriminants of the root type. This means that any constraints
added by the renaming in the derivation are disregarded as far
as the layout of the derived type is concerned. To rescue them,
we change the type of the (stored) discriminants to a subtype
with the bounds of the type of the visible discriminants. */
if
(
has_discr
&&
!
is_extension
&&
Stored_Constraint
(
gnat_entity
)
!=
No_Elist
)
for
(
gnat_constr
=
First_Elmt
(
Stored_Constraint
(
gnat_entity
));
gnat_constr
!=
No_Elmt
;
gnat_constr
=
Next_Elmt
(
gnat_constr
))
if
(
Nkind
(
Node
(
gnat_constr
))
==
N_Identifier
/* Ignore access discriminants. */
&&
!
Is_Access_Type
(
Etype
(
Node
(
gnat_constr
)))
&&
Ekind
(
Entity
(
Node
(
gnat_constr
)))
==
E_Discriminant
)
{
Entity_Id
gnat_discr
=
Entity
(
Node
(
gnat_constr
));
tree
gnu_discr_type
=
gnat_to_gnu_type
(
Etype
(
gnat_discr
));
tree
gnu_ref
=
gnat_to_gnu_entity
(
Original_Record_Component
(
gnat_discr
),
NULL_TREE
,
0
);
/* GNU_REF must be an expression using a PLACEHOLDER_EXPR built
just above for one of the stored discriminants. */
gcc_assert
(
TREE_TYPE
(
TREE_OPERAND
(
gnu_ref
,
0
))
==
gnu_type
);
if
(
gnu_discr_type
!=
TREE_TYPE
(
gnu_ref
))
{
const
unsigned
prec
=
TYPE_PRECISION
(
TREE_TYPE
(
gnu_ref
));
tree
gnu_subtype
=
TYPE_UNSIGNED
(
TREE_TYPE
(
gnu_ref
))
?
make_unsigned_type
(
prec
)
:
make_signed_type
(
prec
);
TREE_TYPE
(
gnu_subtype
)
=
TREE_TYPE
(
gnu_ref
);
TYPE_EXTRA_SUBTYPE_P
(
gnu_subtype
)
=
1
;
SET_TYPE_RM_MIN_VALUE
(
gnu_subtype
,
TYPE_MIN_VALUE
(
gnu_discr_type
));
SET_TYPE_RM_MAX_VALUE
(
gnu_subtype
,
TYPE_MAX_VALUE
(
gnu_discr_type
));
TREE_TYPE
(
gnu_ref
)
=
TREE_TYPE
(
TREE_OPERAND
(
gnu_ref
,
1
))
=
gnu_subtype
;
}
}
/* Add the fields into the record type and finish it up. */
components_to_record
(
gnu_type
,
Component_List
(
record_definition
),
gnu_field_list
,
packed
,
definition
,
false
,
...
...
@@ -4125,10 +4078,7 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition)
tree
gnu_stub_type
=
NULL_TREE
,
gnu_stub_name
=
NULL_TREE
;
tree
gnu_ext_name
=
create_concat_name
(
gnat_entity
,
NULL
);
Entity_Id
gnat_param
;
enum
inline_status_t
inline_status
=
Has_Pragma_No_Inline
(
gnat_entity
)
?
is_suppressed
:
(
Is_Inlined
(
gnat_entity
)
?
is_enabled
:
is_disabled
);
bool
inline_flag
=
Is_Inlined
(
gnat_entity
);
bool
public_flag
=
Is_Public
(
gnat_entity
)
||
imported_p
;
bool
extern_flag
=
(
Is_Public
(
gnat_entity
)
&&
!
definition
)
||
imported_p
;
...
...
@@ -4684,15 +4634,15 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition)
gnu_decl
=
create_subprog_decl
(
gnu_entity_name
,
gnu_ext_name
,
gnu_type
,
gnu_param_list
,
inline_
status
,
public_flag
,
extern_flag
,
artificial_flag
,
attr_list
,
gnat_entity
);
gnu_param_list
,
inline_
flag
,
public_flag
,
extern_flag
,
artificial_flag
,
attr_list
,
gnat_entity
);
if
(
has_stub
)
{
tree
gnu_stub_decl
=
create_subprog_decl
(
gnu_entity_name
,
gnu_stub_name
,
gnu_stub_type
,
gnu_stub_param_list
,
inline_
status
,
true
,
extern_flag
,
inline_
flag
,
true
,
extern_flag
,
false
,
attr_list
,
gnat_entity
);
SET_DECL_FUNCTION_STUB
(
gnu_decl
,
gnu_stub_decl
);
}
...
...
@@ -5425,7 +5375,7 @@ get_minimal_subprog_decl (Entity_Id gnat_entity)
return
create_subprog_decl
(
gnu_entity_name
,
gnu_ext_name
,
void_ftype
,
NULL_TREE
,
is_disabled
,
true
,
true
,
true
,
attr_list
,
gnat_entity
);
false
,
true
,
true
,
true
,
attr_list
,
gnat_entity
);
}
/* Return whether the E_Subprogram_Type/E_Function/E_Procedure GNAT_ENTITY is
...
...
@@ -6014,7 +5964,7 @@ elaborate_entity (Entity_Id gnat_entity)
Present
(
gnat_field
);
gnat_field
=
Next_Discriminant
(
gnat_field
),
gnat_discriminant_expr
=
Next_Elmt
(
gnat_discriminant_expr
))
/*
I
gnore access discriminants. */
/*
??? For now, i
gnore access discriminants. */
if
(
!
Is_Access_Type
(
Etype
(
Node
(
gnat_discriminant_expr
))))
elaborate_expression
(
Node
(
gnat_discriminant_expr
),
gnat_entity
,
get_entity_name
(
gnat_field
),
...
...
@@ -7660,20 +7610,20 @@ build_subst_list (Entity_Id gnat_subtype, Entity_Id gnat_type, bool definition)
{
vec
<
subst_pair
>
gnu_list
=
vNULL
;
Entity_Id
gnat_discrim
;
Node_Id
gnat_
constr
;
Node_Id
gnat_
value
;
for
(
gnat_discrim
=
First_Stored_Discriminant
(
gnat_type
),
gnat_
constr
=
First_Elmt
(
Stored_Constraint
(
gnat_subtype
));
gnat_
value
=
First_Elmt
(
Stored_Constraint
(
gnat_subtype
));
Present
(
gnat_discrim
);
gnat_discrim
=
Next_Stored_Discriminant
(
gnat_discrim
),
gnat_
constr
=
Next_Elmt
(
gnat_constr
))
gnat_
value
=
Next_Elmt
(
gnat_value
))
/* Ignore access discriminants. */
if
(
!
Is_Access_Type
(
Etype
(
Node
(
gnat_
constr
))))
if
(
!
Is_Access_Type
(
Etype
(
Node
(
gnat_
value
))))
{
tree
gnu_field
=
gnat_to_gnu_field_decl
(
gnat_discrim
);
tree
replacement
=
convert
(
TREE_TYPE
(
gnu_field
),
elaborate_expression
(
Node
(
gnat_
constr
),
gnat_subtype
,
(
Node
(
gnat_
value
),
gnat_subtype
,
get_entity_name
(
gnat_discrim
),
definition
,
true
,
false
));
subst_pair
s
=
{
gnu_field
,
replacement
};
...
...
gcc/ada/gcc-interface/gigi.h
View file @
47625858
...
...
@@ -430,17 +430,6 @@ enum exception_info_kind
exception_column
};
/* Define the inline status of a subprogram. */
enum
inline_status_t
{
/* Inlining is suppressed for the subprogram. */
is_suppressed
,
/* No inlining is requested for the subprogram. */
is_disabled
,
/* Inlining is requested for the subprogram. */
is_enabled
};
extern
GTY
(())
tree
gnat_std_decls
[(
int
)
ADT_LAST
];
extern
GTY
(())
tree
gnat_raise_decls
[(
int
)
LAST_REASON_CODE
+
1
];
extern
GTY
(())
tree
gnat_raise_decls_ext
[(
int
)
LAST_REASON_CODE
+
1
];
...
...
@@ -729,14 +718,13 @@ extern tree create_label_decl (tree, Node_Id);
node), PARAM_DECL_LIST is the list of the subprogram arguments (a list of
PARM_DECL nodes chained through the DECL_CHAIN field).
INLINE_
STATUS
, PUBLIC_FLAG, EXTERN_FLAG, ARTIFICIAL_FLAG and ATTR_LIST are
INLINE_
FLAG
, PUBLIC_FLAG, EXTERN_FLAG, ARTIFICIAL_FLAG and ATTR_LIST are
used to set the appropriate fields in the FUNCTION_DECL. GNAT_NODE is
used for the position of the decl. */
extern
tree
create_subprog_decl
(
tree
subprog_name
,
tree
asm_name
,
tree
subprog_type
,
tree
param_decl_list
,
enum
inline_status_t
inline_status
,
bool
public_flag
,
bool
extern_flag
,
bool
artificial_flag
,
bool
inline_flag
,
bool
public_flag
,
bool
extern_flag
,
bool
artificial_flag
,
struct
attrib
*
attr_list
,
Node_Id
gnat_node
);
/* Set up the framework for generating code for SUBPROG_DECL, a subprogram
...
...
gcc/ada/gcc-interface/trans.c
View file @
47625858
...
...
@@ -36,8 +36,6 @@
#include "gimple.h"
#include "bitmap.h"
#include "cgraph.h"
#include "diagnostic.h"
#include "opts.h"
#include "target.h"
#include "common/common-target.h"
...
...
@@ -212,7 +210,7 @@ typedef struct range_check_info_d *range_check_info;
/* Structure used to record information for a loop. */
struct
GTY
(())
loop_info_d
{
tree
stmt
;
tree
label
;
tree
loop_var
;
vec
<
range_check_info
,
va_gc
>
*
checks
;
};
...
...
@@ -413,16 +411,16 @@ gigi (Node_Id gnat_root, int max_gnat_node, int number_name ATTRIBUTE_UNUSED,
memory. */
malloc_decl
=
create_subprog_decl
(
get_identifier
(
"__gnat_malloc"
),
NULL_TREE
,
ftype
,
NULL_TREE
,
is_disabled
,
true
,
true
,
true
,
NULL
,
Empty
);
ftype
,
NULL_TREE
,
false
,
true
,
true
,
true
,
NULL
,
Empty
);
DECL_IS_MALLOC
(
malloc_decl
)
=
1
;
/* malloc32 is a function declaration tree for a function to allocate
32-bit memory on a 64-bit system. Needed only on 64-bit VMS. */
malloc32_decl
=
create_subprog_decl
(
get_identifier
(
"__gnat_malloc32"
),
NULL_TREE
,
ftype
,
NULL_TREE
,
is_disabled
,
true
,
true
,
true
,
NULL
,
Empty
);
ftype
,
NULL_TREE
,
false
,
true
,
true
,
true
,
NULL
,
Empty
);
DECL_IS_MALLOC
(
malloc32_decl
)
=
1
;
/* free is a function declaration tree for a function to free memory. */
...
...
@@ -431,16 +429,14 @@ gigi (Node_Id gnat_root, int max_gnat_node, int number_name ATTRIBUTE_UNUSED,
build_function_type_list
(
void_type_node
,
ptr_void_type_node
,
NULL_TREE
),
NULL_TREE
,
is_disabled
,
true
,
true
,
true
,
NULL
,
Empty
);
NULL_TREE
,
false
,
true
,
true
,
true
,
NULL
,
Empty
);
/* This is used for 64-bit multiplication with overflow checking. */
mulv64_decl
=
create_subprog_decl
(
get_identifier
(
"__gnat_mulv64"
),
NULL_TREE
,
build_function_type_list
(
int64_type
,
int64_type
,
int64_type
,
NULL_TREE
),
NULL_TREE
,
is_disabled
,
true
,
true
,
true
,
NULL
,
Empty
);
NULL_TREE
,
false
,
true
,
true
,
true
,
NULL
,
Empty
);
/* Name of the _Parent field in tagged record types. */
parent_name_id
=
get_identifier
(
Get_Name_String
(
Name_uParent
));
...
...
@@ -461,7 +457,7 @@ gigi (Node_Id gnat_root, int max_gnat_node, int number_name ATTRIBUTE_UNUSED,
=
create_subprog_decl
(
get_identifier
(
"system__soft_links__get_jmpbuf_address_soft"
),
NULL_TREE
,
build_function_type_list
(
jmpbuf_ptr_type
,
NULL_TREE
),
NULL_TREE
,
is_disabled
,
true
,
true
,
true
,
NULL
,
Empty
);
NULL_TREE
,
false
,
true
,
true
,
true
,
NULL
,
Empty
);
DECL_IGNORED_P
(
get_jmpbuf_decl
)
=
1
;
set_jmpbuf_decl
...
...
@@ -469,7 +465,7 @@ gigi (Node_Id gnat_root, int max_gnat_node, int number_name ATTRIBUTE_UNUSED,
(
get_identifier
(
"system__soft_links__set_jmpbuf_address_soft"
),
NULL_TREE
,
build_function_type_list
(
void_type_node
,
jmpbuf_ptr_type
,
NULL_TREE
),
NULL_TREE
,
is_disabled
,
true
,
true
,
true
,
NULL
,
Empty
);
NULL_TREE
,
false
,
true
,
true
,
true
,
NULL
,
Empty
);
DECL_IGNORED_P
(
set_jmpbuf_decl
)
=
1
;
/* setjmp returns an integer and has one operand, which is a pointer to
...
...
@@ -479,7 +475,7 @@ gigi (Node_Id gnat_root, int max_gnat_node, int number_name ATTRIBUTE_UNUSED,
(
get_identifier
(
"__builtin_setjmp"
),
NULL_TREE
,
build_function_type_list
(
integer_type_node
,
jmpbuf_ptr_type
,
NULL_TREE
),
NULL_TREE
,
is_disabled
,
true
,
true
,
true
,
NULL
,
Empty
);
NULL_TREE
,
false
,
true
,
true
,
true
,
NULL
,
Empty
);
DECL_BUILT_IN_CLASS
(
setjmp_decl
)
=
BUILT_IN_NORMAL
;
DECL_FUNCTION_CODE
(
setjmp_decl
)
=
BUILT_IN_SETJMP
;
...
...
@@ -489,7 +485,7 @@ gigi (Node_Id gnat_root, int max_gnat_node, int number_name ATTRIBUTE_UNUSED,
=
create_subprog_decl
(
get_identifier
(
"__builtin_update_setjmp_buf"
),
NULL_TREE
,
build_function_type_list
(
void_type_node
,
jmpbuf_ptr_type
,
NULL_TREE
),
NULL_TREE
,
is_disabled
,
true
,
true
,
true
,
NULL
,
Empty
);
NULL_TREE
,
false
,
true
,
true
,
true
,
NULL
,
Empty
);
DECL_BUILT_IN_CLASS
(
update_setjmp_buf_decl
)
=
BUILT_IN_NORMAL
;
DECL_FUNCTION_CODE
(
update_setjmp_buf_decl
)
=
BUILT_IN_UPDATE_SETJMP_BUF
;
...
...
@@ -499,27 +495,27 @@ gigi (Node_Id gnat_root, int max_gnat_node, int number_name ATTRIBUTE_UNUSED,
begin_handler_decl
=
create_subprog_decl
(
get_identifier
(
"__gnat_begin_handler"
),
NULL_TREE
,
ftype
,
NULL_TREE
,
is_disabled
,
true
,
true
,
true
,
NULL
,
Empty
);
ftype
,
NULL_TREE
,
false
,
true
,
true
,
true
,
NULL
,
Empty
);
DECL_IGNORED_P
(
begin_handler_decl
)
=
1
;
end_handler_decl
=
create_subprog_decl
(
get_identifier
(
"__gnat_end_handler"
),
NULL_TREE
,
ftype
,
NULL_TREE
,
is_disabled
,
true
,
true
,
true
,
NULL
,
Empty
);
ftype
,
NULL_TREE
,
false
,
true
,
true
,
true
,
NULL
,
Empty
);
DECL_IGNORED_P
(
end_handler_decl
)
=
1
;
unhandled_except_decl
=
create_subprog_decl
(
get_identifier
(
"__gnat_unhandled_except_handler"
),
NULL_TREE
,
ftype
,
NULL_TREE
,
is_disabled
,
true
,
true
,
true
,
NULL
,
Empty
);
ftype
,
NULL_TREE
,
false
,
true
,
true
,
true
,
NULL
,
Empty
);
DECL_IGNORED_P
(
unhandled_except_decl
)
=
1
;
reraise_zcx_decl
=
create_subprog_decl
(
get_identifier
(
"__gnat_reraise_zcx"
),
NULL_TREE
,
ftype
,
NULL_TREE
,
is_disabled
,
true
,
true
,
true
,
NULL
,
Empty
);
ftype
,
NULL_TREE
,
false
,
true
,
true
,
true
,
NULL
,
Empty
);
/* Indicate that these never return. */
DECL_IGNORED_P
(
reraise_zcx_decl
)
=
1
;
TREE_THIS_VOLATILE
(
reraise_zcx_decl
)
=
1
;
...
...
@@ -539,7 +535,7 @@ gigi (Node_Id gnat_root, int max_gnat_node, int number_name ATTRIBUTE_UNUSED,
build_pointer_type
(
unsigned_char_type_node
),
integer_type_node
,
NULL_TREE
),
NULL_TREE
,
is_disabled
,
true
,
true
,
true
,
NULL
,
Empty
);
NULL_TREE
,
false
,
true
,
true
,
true
,
NULL
,
Empty
);
TREE_THIS_VOLATILE
(
decl
)
=
1
;
TREE_SIDE_EFFECTS
(
decl
)
=
1
;
TREE_TYPE
(
decl
)
...
...
@@ -572,7 +568,7 @@ gigi (Node_Id gnat_root, int max_gnat_node, int number_name ATTRIBUTE_UNUSED,
(
get_identifier
(
"system__soft_links__get_gnat_exception"
),
NULL_TREE
,
build_function_type_list
(
build_pointer_type
(
except_type_node
),
NULL_TREE
),
NULL_TREE
,
is_disabled
,
true
,
true
,
true
,
NULL
,
Empty
);
NULL_TREE
,
false
,
true
,
true
,
true
,
NULL
,
Empty
);
DECL_IGNORED_P
(
get_excptr_decl
)
=
1
;
raise_nodefer_decl
...
...
@@ -581,7 +577,7 @@ gigi (Node_Id gnat_root, int max_gnat_node, int number_name ATTRIBUTE_UNUSED,
build_function_type_list
(
void_type_node
,
build_pointer_type
(
except_type_node
),
NULL_TREE
),
NULL_TREE
,
is_disabled
,
true
,
true
,
true
,
NULL
,
Empty
);
NULL_TREE
,
false
,
true
,
true
,
true
,
NULL
,
Empty
);
/* Indicate that it never returns. */
TREE_THIS_VOLATILE
(
raise_nodefer_decl
)
=
1
;
...
...
@@ -754,7 +750,7 @@ build_raise_check (int check, enum exception_info_kind kind)
result
=
create_subprog_decl
(
get_identifier
(
Name_Buffer
),
NULL_TREE
,
ftype
,
NULL_TREE
,
is_disabled
,
true
,
true
,
true
,
NULL
,
Empty
);
false
,
true
,
true
,
true
,
NULL
,
Empty
);
/* Indicate that it never returns. */
TREE_THIS_VOLATILE
(
result
)
=
1
;
...
...
@@ -1188,11 +1184,11 @@ Identifier_to_gnu (Node_Id gnat_node, tree *gnu_result_type_p)
static
tree
Pragma_to_gnu
(
Node_Id
gnat_node
)
{
tree
gnu_result
=
alloc_stmt_list
();
Node_Id
gnat_temp
;
tree
gnu_result
=
alloc_stmt_list
();
/*
Do nothing if we are just annotating types and check for (and ignore)
unrecognized pragma
s. */
/*
Check for (and ignore) unrecognized pragma and do nothing if we are just
annotating type
s. */
if
(
type_annotate_only
||
!
Is_Pragma_Name
(
Chars
(
Pragma_Identifier
(
gnat_node
))))
return
gnu_result
;
...
...
@@ -1254,37 +1250,6 @@ Pragma_to_gnu (Node_Id gnat_node)
}
break
;
case
Pragma_Loop_Optimize
:
for
(
gnat_temp
=
First
(
Pragma_Argument_Associations
(
gnat_node
));
Present
(
gnat_temp
);
gnat_temp
=
Next
(
gnat_temp
))
{
tree
gnu_loop_stmt
=
gnu_loop_stack
->
last
()
->
stmt
;
switch
(
Chars
(
Expression
(
gnat_temp
)))
{
case
Name_No_Unroll
:
LOOP_STMT_NO_UNROLL
(
gnu_loop_stmt
)
=
1
;
break
;
case
Name_Unroll
:
LOOP_STMT_UNROLL
(
gnu_loop_stmt
)
=
1
;
break
;
case
Name_No_Vector
:
LOOP_STMT_NO_VECTOR
(
gnu_loop_stmt
)
=
1
;
break
;
case
Name_Vector
:
LOOP_STMT_VECTOR
(
gnu_loop_stmt
)
=
1
;
break
;
default
:
gcc_unreachable
();
}
}
break
;
case
Pragma_Optimize
:
switch
(
Chars
(
Expression
(
First
(
Pragma_Argument_Associations
(
gnat_node
)))))
...
...
@@ -1313,87 +1278,6 @@ Pragma_to_gnu (Node_Id gnat_node)
if
(
write_symbols
==
NO_DEBUG
)
post_error
(
"must specify -g?"
,
gnat_node
);
break
;
case
Pragma_Warnings
:
{
Node_Id
gnat_expr
;
/* Preserve the location of the pragma. */
const
location_t
location
=
input_location
;
struct
cl_option_handlers
handlers
;
unsigned
int
option_index
;
diagnostic_t
kind
;
bool
imply
;
gnat_temp
=
First
(
Pragma_Argument_Associations
(
gnat_node
));
/* This is the String form: pragma Warnings (String). */
if
(
Nkind
(
Expression
(
gnat_temp
))
==
N_String_Literal
)
{
kind
=
DK_WARNING
;
gnat_expr
=
Expression
(
gnat_temp
);
imply
=
true
;
}
/* This is the On/Off form: pragma Warnings (On | Off [,String]). */
else
if
(
Nkind
(
Expression
(
gnat_temp
))
==
N_Identifier
)
{
switch
(
Chars
(
Expression
(
gnat_temp
)))
{
case
Name_Off
:
kind
=
DK_IGNORED
;
break
;
case
Name_On
:
kind
=
DK_WARNING
;
break
;
default
:
gcc_unreachable
();
}
if
(
Present
(
Next
(
gnat_temp
)))
{
/* pragma Warnings (On | Off, Name) is handled differently. */
if
(
Nkind
(
Expression
(
Next
(
gnat_temp
)))
!=
N_String_Literal
)
break
;
gnat_expr
=
Expression
(
Next
(
gnat_temp
));
}
else
gnat_expr
=
Empty
;
imply
=
false
;
}
else
gcc_unreachable
();
/* This is the same implementation as in the C family of compilers. */
if
(
Present
(
gnat_expr
))
{
tree
gnu_expr
=
gnat_to_gnu
(
gnat_expr
);
const
char
*
opt_string
=
TREE_STRING_POINTER
(
gnu_expr
);
const
int
len
=
TREE_STRING_LENGTH
(
gnu_expr
);
if
(
len
<
3
||
opt_string
[
0
]
!=
'-'
||
opt_string
[
1
]
!=
'W'
)
break
;
for
(
option_index
=
0
;
option_index
<
cl_options_count
;
option_index
++
)
if
(
strcmp
(
cl_options
[
option_index
].
opt_text
,
opt_string
)
==
0
)
break
;
}
else
option_index
=
0
;
set_default_handlers
(
&
handlers
);
control_warning_option
(
option_index
,
(
int
)
kind
,
imply
,
location
,
CL_Ada
,
&
handlers
,
&
global_options
,
&
global_options_set
,
global_dc
);
}
break
;
default
:
break
;
}
return
gnu_result
;
...
...
@@ -2460,8 +2344,8 @@ Loop_Statement_to_gnu (Node_Id gnat_node)
&
DECL_SOURCE_LOCATION
(
gnu_loop_label
));
LOOP_STMT_LABEL
(
gnu_loop_stmt
)
=
gnu_loop_label
;
/* Save the
statement for later reuse
. */
gnu_loop_info
->
stmt
=
gnu_loop_stmt
;
/* Save the
label so that a corresponding N_Exit_Statement can find it
. */
gnu_loop_info
->
label
=
gnu_loop_label
;
/* Set the condition under which the loop must keep going.
For the case "LOOP .... END LOOP;" the condition is always true. */
...
...
@@ -2815,7 +2699,7 @@ establish_gnat_vms_condition_handler (void)
ptr_void_type_node
,
ptr_void_type_node
,
NULL_TREE
),
NULL_TREE
,
is_disabled
,
true
,
true
,
true
,
NULL
,
NULL_TREE
,
false
,
true
,
true
,
true
,
NULL
,
Empty
);
/* ??? DECL_CONTEXT shouldn't have been set because of DECL_EXTERNAL. */
...
...
@@ -4869,7 +4753,7 @@ Compilation_Unit_to_gnu (Node_Id gnat_node)
tree
gnu_elab_proc_decl
=
create_subprog_decl
(
create_concat_name
(
gnat_unit_entity
,
body_p
?
"elabb"
:
"elabs"
),
NULL_TREE
,
void_ftype
,
NULL_TREE
,
is_disabled
,
true
,
false
,
true
,
NULL
,
NULL_TREE
,
void_ftype
,
NULL_TREE
,
false
,
true
,
false
,
true
,
NULL
,
gnat_unit
);
struct
elab_info
*
info
;
...
...
@@ -5797,7 +5681,7 @@ gnat_to_gnu (Node_Id gnat_node)
create_subprog_decl
(
create_concat_name
(
Entity
(
Prefix
(
gnat_node
)),
attr
==
Attr_Elab_Body
?
"elabb"
:
"elabs"
),
NULL_TREE
,
void_ftype
,
NULL_TREE
,
is_disabled
,
NULL_TREE
,
void_ftype
,
NULL_TREE
,
false
,
true
,
true
,
true
,
NULL
,
gnat_node
);
gnu_result
=
Attribute_to_gnu
(
gnat_node
,
&
gnu_result_type
,
attr
);
...
...
@@ -6406,7 +6290,7 @@ gnat_to_gnu (Node_Id gnat_node)
?
gnat_to_gnu
(
Condition
(
gnat_node
))
:
NULL_TREE
),
(
Present
(
Name
(
gnat_node
))
?
get_gnu_tree
(
Entity
(
Name
(
gnat_node
)))
:
LOOP_STMT_LABEL
(
gnu_loop_stack
->
last
()
->
stmt
)
));
:
gnu_loop_stack
->
last
()
->
label
));
break
;
case
N_Simple_Return_Statement
:
...
...
gcc/ada/gcc-interface/utils.c
View file @
47625858
...
...
@@ -6,7 +6,7 @@
* *
* C Implementation File *
* *
* Copyright (C) 1992-201
3
, Free Software Foundation, Inc. *
* Copyright (C) 1992-201
2
, Free Software Foundation, Inc. *
* *
* GNAT is free software; you can redistribute it and/or modify it under *
* terms of the GNU General Public License as published by the Free Soft- *
...
...
@@ -2621,14 +2621,14 @@ create_label_decl (tree label_name, Node_Id gnat_node)
node), PARAM_DECL_LIST is the list of the subprogram arguments (a list of
PARM_DECL nodes chained through the DECL_CHAIN field).
INLINE_
STATUS
, PUBLIC_FLAG, EXTERN_FLAG, ARTIFICIAL_FLAG and ATTR_LIST are
INLINE_
FLAG
, PUBLIC_FLAG, EXTERN_FLAG, ARTIFICIAL_FLAG and ATTR_LIST are
used to set the appropriate fields in the FUNCTION_DECL. GNAT_NODE is
used for the position of the decl. */
tree
create_subprog_decl
(
tree
subprog_name
,
tree
asm_name
,
tree
subprog_type
,
tree
param_decl_list
,
enum
inline_status_t
inline_status
,
bool
public_flag
,
bool
extern_flag
,
bool
artificial_flag
,
tree
param_decl_list
,
bool
inline_flag
,
bool
public_flag
,
bool
extern_flag
,
bool
artificial_flag
,
struct
attrib
*
attr_list
,
Node_Id
gnat_node
)
{
tree
subprog_decl
=
build_decl
(
input_location
,
FUNCTION_DECL
,
subprog_name
,
...
...
@@ -2642,7 +2642,7 @@ create_subprog_decl (tree subprog_name, tree asm_name, tree subprog_type,
function in the current unit since it is private to the other unit.
We could inline the nested function as well but it's probably better
to err on the side of too little inlining. */
if
(
inline_status
!=
is_enabled
if
(
!
inline_flag
&&
!
public_flag
&&
current_function_decl
&&
DECL_DECLARED_INLINE_P
(
current_function_decl
)
...
...
@@ -2651,24 +2651,8 @@ create_subprog_decl (tree subprog_name, tree asm_name, tree subprog_type,
DECL_ARTIFICIAL
(
subprog_decl
)
=
artificial_flag
;
DECL_EXTERNAL
(
subprog_decl
)
=
extern_flag
;
switch
(
inline_status
)
{
case
is_suppressed
:
DECL_UNINLINABLE
(
subprog_decl
)
=
1
;
break
;
case
is_disabled
:
break
;
case
is_enabled
:
DECL_DECLARED_INLINE_P
(
subprog_decl
)
=
1
;
DECL_NO_INLINE_WARNING_P
(
subprog_decl
)
=
artificial_flag
;
break
;
default
:
gcc_unreachable
();
}
DECL_DECLARED_INLINE_P
(
subprog_decl
)
=
inline_flag
;
DECL_NO_INLINE_WARNING_P
(
subprog_decl
)
=
inline_flag
&&
artificial_flag
;
TREE_PUBLIC
(
subprog_decl
)
=
public_flag
;
TREE_READONLY
(
subprog_decl
)
=
TYPE_READONLY
(
subprog_type
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment