[PATCH] D47084: Maintain PS4 ABI compatibility
Douglas Yung via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Fri May 18 12:09:09 PDT 2018
dyung created this revision.
dyung added a reviewer: probinson.
In r331136, a change was made to the compiler to fix a problem with how clang applied the packed attribute to classes. This is an ABI breaking change for the PS4 target, so this change maintains the broken behavior for the PS4 target.
Repository:
rC Clang
https://reviews.llvm.org/D47084
Files:
lib/AST/RecordLayoutBuilder.cpp
test/CodeGenCXX/alignment.cpp
Index: test/CodeGenCXX/alignment.cpp
===================================================================
--- test/CodeGenCXX/alignment.cpp
+++ test/CodeGenCXX/alignment.cpp
@@ -1,5 +1,6 @@
// RUN: %clang_cc1 %s -emit-llvm -o - -triple=x86_64-apple-darwin10 | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-NOCOMPAT
// RUN: %clang_cc1 %s -emit-llvm -o - -triple=x86_64-apple-darwin10 -fclang-abi-compat=6.0 | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-V6COMPAT
+// RUN: %clang_cc1 %s -emit-llvm -o - -triple=x86_64-scei-ps4 | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-V6COMPAT
extern int int_source();
extern void int_sink(int x);
Index: lib/AST/RecordLayoutBuilder.cpp
===================================================================
--- lib/AST/RecordLayoutBuilder.cpp
+++ lib/AST/RecordLayoutBuilder.cpp
@@ -1178,10 +1178,12 @@
// Clang <= 6 incorrectly applied the 'packed' attribute to base classes.
// Per GCC's documentation, it only applies to non-static data members.
CharUnits UnpackedBaseAlign = Layout.getNonVirtualAlignment();
- CharUnits BaseAlign = (Packed && Context.getLangOpts().getClangABICompat() <=
- LangOptions::ClangABI::Ver6)
- ? CharUnits::One()
- : UnpackedBaseAlign;
+ CharUnits BaseAlign =
+ (Packed && ((Context.getLangOpts().getClangABICompat() <=
+ LangOptions::ClangABI::Ver6) ||
+ Context.getTargetInfo().getTriple().isPS4()))
+ ? CharUnits::One()
+ : UnpackedBaseAlign;
// If we have an empty base class, try to place it at offset 0.
if (Base->Class->isEmpty() &&
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D47084.147571.patch
Type: text/x-patch
Size: 1709 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20180518/f7fb7873/attachment.bin>
More information about the cfe-commits
mailing list