diff options
author | Bernhard Schommer <bschommer@users.noreply.github.com> | 2018-09-10 15:43:20 +0200 |
---|---|---|
committer | Xavier Leroy <xavierleroy@users.noreply.github.com> | 2018-09-10 15:43:20 +0200 |
commit | 45ca9fe8fcc6a67036369624f57576be22ac7bbd (patch) | |
tree | 7f4e1e79a1abd7fccfdf965f872e9ae6b4437c52 /cfrontend/C2C.ml | |
parent | 49ecf8a3e5b5a4449f4bcbc1d6d4f55c8b5888be (diff) | |
download | compcert-45ca9fe8fcc6a67036369624f57576be22ac7bbd.tar.gz compcert-45ca9fe8fcc6a67036369624f57576be22ac7bbd.zip |
Attach _Alignas to names and refactor _Alignas checks (#133)
* Refactor common code of alignas.
Instead of working on attributes the function now works directly
on the type since the check always performed an extraction of
attributes from a type.
Bug 23393
* Attach _Alignas to the name.
Bug 23393
* Attach "aligned" attributes to names
So that __attribute((aligned(N))) remains consistent with _Alignas(N).
gcc and clang apply "aligned" attributes to names, with a special case
for typedefs:
typedef __attribute((aligned(16))) int int_al_16;
int_al_16 * p;
__attribute((aligned(16))) int * q;
For gcc, p is naturally-aligned pointer to 16-aligned int and
q is 16-aligned pointer to naturally-aligned int.
For CompCert with this commit, both p and q are 16-aligned pointers
to naturally-aligned int.
* Resurrect the alignment test involving typedef
The test was removed because it involved an _Alignas in a typedef,
which is no longer supported. However the same effect can be achieved
with an "aligned" attribute, which is still supported in typedef.
Diffstat (limited to 'cfrontend/C2C.ml')
-rw-r--r-- | cfrontend/C2C.ml | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/cfrontend/C2C.ml b/cfrontend/C2C.ml index ecaffbc6..1bbcb146 100644 --- a/cfrontend/C2C.ml +++ b/cfrontend/C2C.ml @@ -307,14 +307,14 @@ let builtins = (** ** The known attributes *) let attributes = [ - (* type-related *) - ("aligned", Cutil.Attr_type); + (* type-related -- currently none *) (* struct-related *) ("packed", Cutil.Attr_struct); (* function-related *) ("noreturn", Cutil.Attr_function); ("noinline",Cutil.Attr_function); (* name-related *) + ("aligned", Cutil.Attr_name); ("section", Cutil.Attr_name); ("unused", Cutil.Attr_name) ] |