Chromium Code Reviews| Index: base/compiler_specific.h |
| diff --git a/base/compiler_specific.h b/base/compiler_specific.h |
| index 34b0c2d7a2913f98c9b7faa10cc5ab7d7640b4c0..c520de053999cbc870c538bac3a1c4a60fd99d05 100644 |
| --- a/base/compiler_specific.h |
| +++ b/base/compiler_specific.h |
| @@ -111,21 +111,29 @@ |
| // Use like: |
| // class ALIGNAS(16) MyClass { ... } |
| // ALIGNAS(16) int array[4]; |
| +// |
| +// In most places you can use the C++11 keyword "alignas", which is preferred. |
| +// |
| +// But compilers have trouble mixing __attribute__((...)) syntax with |
| +// alignas(...) syntax. |
| +// |
| +// Doesn't work in clang or gcc: |
| +// struct alignas(16) __attribute__((packed)) S { char c; }; |
| +// Works in clang but not gcc: |
| +// struct __attribute__((packed)) alignas(16) S2 { char c; }; |
| +// Works in clang and gcc: |
| +// struct alignas(16) S3 { char c; } __attribute__((packed)); |
| +// |
| +// There are also some attributes that must be specified *before* a class |
| +// definition: visibility (used for exporting functions/classes) is one of |
| +// these attributes. This means that it is not possible to have use alignas() |
|
danakj
2017/06/12 18:32:10
typo: "to have use"
brettw
2017/06/12 22:22:15
I did this but haven't uploaded yet since I assume
|
| +// with a class that is marked as exported. |
| #if defined(COMPILER_MSVC) |
| #define ALIGNAS(byte_alignment) __declspec(align(byte_alignment)) |
| #elif defined(COMPILER_GCC) |
| #define ALIGNAS(byte_alignment) __attribute__((aligned(byte_alignment))) |
| #endif |
| -// Return the byte alignment of the given type (available at compile time). |
| -// Use like: |
| -// ALIGNOF(int32_t) // this would be 4 |
| -#if defined(COMPILER_MSVC) |
| -#define ALIGNOF(type) __alignof(type) |
| -#elif defined(COMPILER_GCC) |
| -#define ALIGNOF(type) __alignof__(type) |
| -#endif |
| - |
| // Annotate a function indicating the caller must examine the return value. |
| // Use like: |
| // int foo() WARN_UNUSED_RESULT; |