aboutsummaryrefslogtreecommitdiff
path: root/gcc/varasm.c
diff options
context:
space:
mode:
authorBrendan Kehoe <brendan@gcc.gnu.org>1998-02-18 05:38:57 -0500
committerBrendan Kehoe <brendan@gcc.gnu.org>1998-02-18 05:38:57 -0500
commitd9525bec09ede003c7bf29bc0ceef27ec083e4a9 (patch)
tree0c6d9928460c8ea947b19cb363645ecf536b2a56 /gcc/varasm.c
parentf9a366acb519c4d2652cac65d3644030b2223e28 (diff)
downloadgcc-d9525bec09ede003c7bf29bc0ceef27ec083e4a9.zip
gcc-d9525bec09ede003c7bf29bc0ceef27ec083e4a9.tar.gz
gcc-d9525bec09ede003c7bf29bc0ceef27ec083e4a9.tar.bz2
tree.h (merge_machine_{type,decl}_attributes): Declare.
./ChangeLog: * tree.h (merge_machine_{type,decl}_attributes): Declare. (split_specs_attrs, strip_attrs): Add prototypes. * tree.c (merge_machine_{type,decl}_attributes): New functions. * c-decl.c (duplicate_decls): Call merge_machine_decl_attributes. Update olddecl's attributes too. * c-common.c (strip_attrs): New function. * c-typeck.c (common_type): Call merge_machine_type_attributes. * varasm.c (make_function_rtl): New target macro REDO_SECTION_INFO_P. (make_decl_rtl): Likewise. * c-decl.c (shadow_tag_warned): Call split_specs_attrs. ./cp/ChangeLog: * decl.c (duplicate_decls): Call merge_machine_decl_attributes. Update olddecl's attributes too. (strip_attrs): Remove function. * typeck.c (common_type): Call merge_machine_type_attributes. From-SVN: r18065
Diffstat (limited to 'gcc/varasm.c')
-rw-r--r--gcc/varasm.c37
1 files changed, 33 insertions, 4 deletions
diff --git a/gcc/varasm.c b/gcc/varasm.c
index 011b234..1129007 100644
--- a/gcc/varasm.c
+++ b/gcc/varasm.c
@@ -523,6 +523,20 @@ make_function_rtl (decl)
ENCODE_SECTION_INFO (decl);
#endif
}
+ else
+ {
+ /* ??? Another way to do this would be to do what halfpic.c does
+ and maintain a hashed table of such critters. */
+ /* ??? Another way to do this would be to pass a flag bit to
+ ENCODE_SECTION_INFO saying whether this is a new decl or not. */
+ /* Let the target reassign the RTL if it wants.
+ This is necessary, for example, when one machine specific
+ decl attribute overrides another. */
+#ifdef REDO_SECTION_INFO_P
+ if (REDO_SECTION_INFO_P (decl))
+ ENCODE_SECTION_INFO (decl);
+#endif
+ }
/* Record at least one function has been defined. */
function_defined = 1;
@@ -768,11 +782,26 @@ make_decl_rtl (decl, asmspec, top_level)
#endif
}
}
- /* If the old RTL had the wrong mode, fix the mode. */
- else if (GET_MODE (DECL_RTL (decl)) != DECL_MODE (decl))
+ else
{
- rtx rtl = DECL_RTL (decl);
- PUT_MODE (rtl, DECL_MODE (decl));
+ /* If the old RTL had the wrong mode, fix the mode. */
+ if (GET_MODE (DECL_RTL (decl)) != DECL_MODE (decl))
+ {
+ rtx rtl = DECL_RTL (decl);
+ PUT_MODE (rtl, DECL_MODE (decl));
+ }
+
+ /* ??? Another way to do this would be to do what halfpic.c does
+ and maintain a hashed table of such critters. */
+ /* ??? Another way to do this would be to pass a flag bit to
+ ENCODE_SECTION_INFO saying whether this is a new decl or not. */
+ /* Let the target reassign the RTL if it wants.
+ This is necessary, for example, when one machine specific
+ decl attribute overrides another. */
+#ifdef REDO_SECTION_INFO_P
+ if (REDO_SECTION_INFO_P (decl))
+ ENCODE_SECTION_INFO (decl);
+#endif
}
}