From: Doug Evans Date: Thu, 17 Feb 1994 22:48:50 +0000 (+0000) Subject: (decl_attributes): Decode section attribute. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=5289b66589cf2d63bf7cc780322d2d81e198970b;p=gcc.git (decl_attributes): Decode section attribute. From-SVN: r6582 --- diff --git a/gcc/c-common.c b/gcc/c-common.c index 73ae7ebd686..492ccfc3451 100644 --- a/gcc/c-common.c +++ b/gcc/c-common.c @@ -207,6 +207,7 @@ decl_attributes (decl, attributes) tree decl, attributes; { tree a; + for (a = attributes; a; a = TREE_CHAIN (a)) if (TREE_VALUE (a) == get_identifier ("packed")) { @@ -253,6 +254,32 @@ decl_attributes (decl, attributes) if (i == NUM_MACHINE_MODES) error ("unknown machine mode `%s'", specified_name); } + else if (TREE_VALUE (a) != 0 + && TREE_CODE (TREE_VALUE (a)) == TREE_LIST + && TREE_PURPOSE (TREE_VALUE (a)) == get_identifier ("section")) + { +#ifdef ASM_OUTPUT_SECTION_NAME + if (TREE_CODE (decl) == FUNCTION_DECL || TREE_CODE (decl) == VAR_DECL) + { + if (TREE_CODE (decl) == VAR_DECL && current_function_decl != NULL_TREE) + error ("section attribute cannot be specified for local variables"); + /* The decl may have already been given a section attribute from + a previous declaration. Ensure they match. */ + else if (DECL_SECTION_NAME (decl) != NULL_TREE + && strcmp (TREE_STRING_POINTER (DECL_SECTION_NAME (decl)), + TREE_STRING_POINTER (TREE_VALUE (TREE_VALUE (a)))) != 0) + error_with_decl (decl, + "section of `%s' conflicts with previous declaration"); + else + DECL_SECTION_NAME (decl) = TREE_VALUE (TREE_VALUE (a)); + } + else + error_with_decl (decl, + "section attribute not allowed for `%s'"); +#else + error_with_decl (decl, "section attributes are not supported for this target"); +#endif + } else if (TREE_VALUE (a) != 0 && TREE_CODE (TREE_VALUE (a)) == TREE_LIST && TREE_PURPOSE (TREE_VALUE (a)) == get_identifier ("aligned"))