[LLVMbugs] [Bug 20418] New: MS ABI: __declspec(align(N)) ignored inside pragma pack when applied to a non-record type

bugzilla-daemon at llvm.org bugzilla-daemon at llvm.org
Wed Jul 23 12:58:15 PDT 2014


            Bug ID: 20418
           Summary: MS ABI: __declspec(align(N)) ignored inside pragma
                    pack when applied to a non-record type
           Product: clang
           Version: unspecified
          Hardware: PC
                OS: Windows NT
            Status: NEW
          Severity: normal
          Priority: P
         Component: Frontend
          Assignee: unassignedclangbugs at nondot.org
          Reporter: rnk at google.com
                CC: david.majnemer at gmail.com, fjahanian at apple.com,
                    llvmbugs at cs.uiuc.edu, richard-llvm at metafoo.co.uk,
                    whunt at google.com
    Classification: Unclassified

typedef __declspec(align(4)) int my_int_t;
#pragma pack(1)
struct A {
  char a;
  my_int_t x;
static_assert(sizeof(A) == 8, "");

MSVC record layout tracks two kinds of alignment: required and natural
alignment.  Inside pragma pack, "required" alignment (alignment from
attributes) trumps the pragma pack alignment.  However, only records have a
concept of required alignment.  Typedefs of scalar types can also have a
required alignment, and we need to track it.

We would also need to track this in the Itanium C++ record layout code if we
want to implement this there, either in general or under ms_struct, as
discussed here:

getTypeInfo should probably be augmented to return more information: size,
natural alignment, required alignment.

You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20140723/dcdd33e6/attachment.html>

More information about the llvm-bugs mailing list