[PATCH] D117616: GCC ABI Compatibility: Preserve alignment of non-pod members in packed structs

Bhramar Vatsa via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Thu Feb 3 22:15:11 PST 2022


Bhramar.vatsa added a comment.

@dblaikie 
The condition "FieldClass->isPOD()" returns false for the following case (when considering field 'struct foo t' of 'struct foo1') :

  class foo {
     foo() = default;
     int _a;
  };
  
  struct foo1 {
      struct foo t;
  } t1;

The same code though doesn't give any warning for gcc: https://godbolt.org/z/f4chraerY

This is because the way it works for CXXRecordDecl : https://github.com/llvm/llvm-project/blob/1e3a02162db20264e9615b1346420c8d199cb347/clang/lib/AST/DeclCXX.cpp#L928

So, there seems to be a difference the way GCC is handling this case, in comparison to how now clang handles it.

For the same case, `D->getType().isCXX11PODType()` (or `isPODType()`) indicates it to be a POD type. So, we think that this should be further changed such that it doesn't break the code that works with GCC.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D117616/new/

https://reviews.llvm.org/D117616



More information about the cfe-commits mailing list