aboutsummaryrefslogtreecommitdiffstats
path: root/cfrontend
diff options
context:
space:
mode:
authorXavier Leroy <xavier.leroy@college-de-france.fr>2019-02-12 11:49:23 +0100
committerXavier Leroy <xavierleroy@users.noreply.github.com>2019-02-25 17:15:36 +0100
commitd7dfc21c20f55b705e3e749c2c7b31f9a4611c39 (patch)
treeee0b6e0ad06941260244deba916e553d68f882e5 /cfrontend
parent0616171c89d3db651b6842338fdf2da9da885aa1 (diff)
downloadcompcert-kvx-d7dfc21c20f55b705e3e749c2c7b31f9a4611c39.tar.gz
compcert-kvx-d7dfc21c20f55b705e3e749c2c7b31f9a4611c39.zip
Distinguish object-related and name-related attributes
This is a second step towards mimicking GCC/Clang's handling of attributes. This commit introduces a distinction between - Object-related attributes, such as "section", which apply to the object (function, variable) being defined; - Name-related attributes, such as "aligned", which apply to the name (object, struct/union member, struct/union/enum tag) being defined. In particular, "aligned" is now attached to "struct" and "union" definitions, while it used to be "floated up" before. The C11 _Alignas modifier is treated like an object-related attribute, so that ``` struct s { ... }; _Alignas(64) struct s x; ``` correctly associates the alignment with "x" and not with "struct s", where it would be ignored because it was not part of the original definition of s.
Diffstat (limited to 'cfrontend')
-rw-r--r--cfrontend/C2C.ml5
1 files changed, 3 insertions, 2 deletions
diff --git a/cfrontend/C2C.ml b/cfrontend/C2C.ml
index d6bf76f3..d70c4dad 100644
--- a/cfrontend/C2C.ml
+++ b/cfrontend/C2C.ml
@@ -315,8 +315,9 @@ let attributes = [
("noinline",Cutil.Attr_function);
(* name-related *)
("aligned", Cutil.Attr_name);
- ("section", Cutil.Attr_name);
- ("unused", Cutil.Attr_name)
+ (* object-related *)
+ ("section", Cutil.Attr_object);
+ ("unused", Cutil.Attr_object)
]