[cfe-dev] How to change CLang struct alignment behaviour?

Joan Lluch via cfe-dev cfe-dev at lists.llvm.org
Mon May 13 09:47:40 PDT 2019


My target implementation has 2 byte (16 bit ints) 
For my target implementation I would want that Clang would always use at least 2 byte aligned padding for Structs, which would match the size of an int. 

The current situation is that for this struct:

struct AA
{
  char n;
  char m;
  char j;
};

I get it aligned by 1:

%a = alloca %struct.AA, align 1     

I would want it to implicitly use 4 bytes instead of 3, (or it be aligned by 2 bytes instead of 1).

If I replace the above struct by this:

struct AA
{
  int n;
  char m;
};

or this:

struct AA
{
  char n;
  char m;
  char j;
  char k
};


I correctly get it aligned by 2:

%a = alloca %struct.AA, align 2

or:

%a = alloca i32, align 2
%tmpcast = bitcast i32* %a to %struct.AA*

In summary, I noticed that Clang will compute struct alignments as an int (2 bytes) if it has one, or if the struct size is already a multiple of 2, but not in other cases.

How do I change that behaviour to get structs always (at least) 2 byte aligned ?

John Lluch

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20190513/ce86c6d2/attachment.html>


More information about the cfe-dev mailing list