Index: clang/docs/ReleaseNotes.rst =================================================================== --- clang/docs/ReleaseNotes.rst +++ clang/docs/ReleaseNotes.rst @@ -819,7 +819,7 @@ ``-fclang-abi-compat=15.0``. - GCC allows POD types to have defaulted special members. Clang historically classified such types as non-POD (for the purposes of Itanium ABI). Clang now - matches the gcc behavior (except on Darwin and PS4). You can switch back to + matches the gcc behavior (except on Darwin, PS4, AIX and z/OS). You can switch back to the old ABI behavior with the flag: ``-fclang-abi-compat=15.0``. OpenMP Support in Clang Index: clang/lib/Basic/Targets/OSTargets.h =================================================================== --- clang/lib/Basic/Targets/OSTargets.h +++ clang/lib/Basic/Targets/OSTargets.h @@ -773,6 +773,10 @@ } bool defaultsToAIXPowerAlignment() const override { return true; } + + bool areDefaultedSMFStillPOD(const LangOptions &) const override { + return false; + } }; // z/OS target @@ -831,6 +835,10 @@ this->UseLeadingZeroLengthBitfield = false; this->ZeroLengthBitfieldBoundary = 32; } + + bool areDefaultedSMFStillPOD(const LangOptions &) const override { + return false; + } }; void addWindowsDefines(const llvm::Triple &Triple, const LangOptions &Opts, Index: clang/test/SemaCXX/class-layout.cpp =================================================================== --- clang/test/SemaCXX/class-layout.cpp +++ clang/test/SemaCXX/class-layout.cpp @@ -9,6 +9,8 @@ // RUN: %clang_cc1 -triple x86_64-unknown-unknown %s -fsyntax-only -verify -std=c++11 -Wno-inaccessible-base -fclang-abi-compat=16 -DCLANG_ABI_COMPAT=16 // expected-no-diagnostics +#if !defined(__MVS__) && !defined(_AIX) + #define SA(n, p) int a##n[(p) ? 1 : -1] struct A { @@ -611,6 +613,8 @@ #pragma pack(pop) } +#endif // !defined(__MVS__) && !defined(__AIX__) + namespace non_pod { struct t1 { protected: