diff options
| author | Akira Hatanaka <ahatanaka@apple.com> | 2017-07-27 18:52:44 +0000 |
|---|---|---|
| committer | Akira Hatanaka <ahatanaka@apple.com> | 2017-07-27 18:52:44 +0000 |
| commit | c47fcf0ae5304127f98964817a1f1fa75eec91f3 (patch) | |
| tree | 9bc34e071d93f774c281af66cac6eb606b0033f7 /clang/lib | |
| parent | 4d82e40310371ba0e3bbc73d4aeacde371b4c3d3 (diff) | |
| download | bcm5719-llvm-c47fcf0ae5304127f98964817a1f1fa75eec91f3.tar.gz bcm5719-llvm-c47fcf0ae5304127f98964817a1f1fa75eec91f3.zip | |
Revert r264998 and r265035.
r303175 made changes to have __cxa_allocate_exception return a 16-byte
aligned pointer, so it's no longer necessary to specify a lower
alignment (8-bytes) for exception objects on Darwin.
rdar://problem/32363695
llvm-svn: 309308
Diffstat (limited to 'clang/lib')
| -rw-r--r-- | clang/lib/Basic/Targets/OSTargets.h | 7 | ||||
| -rw-r--r-- | clang/lib/CodeGen/ItaniumCXXABI.cpp | 12 |
2 files changed, 10 insertions, 9 deletions
diff --git a/clang/lib/Basic/Targets/OSTargets.h b/clang/lib/Basic/Targets/OSTargets.h index 867810456b3..3919164bf9a 100644 --- a/clang/lib/Basic/Targets/OSTargets.h +++ b/clang/lib/Basic/Targets/OSTargets.h @@ -127,13 +127,6 @@ public: /// is very similar to ELF's "protected"; Darwin requires a "weak" /// attribute on declarations that can be dynamically replaced. bool hasProtectedVisibility() const override { return false; } - - unsigned getExnObjectAlignment() const override { - // The alignment of an exception object is 8-bytes for darwin since - // libc++abi doesn't declare _Unwind_Exception with __attribute__((aligned)) - // and therefore doesn't guarantee 16-byte alignment. - return 64; - } }; // DragonFlyBSD Target diff --git a/clang/lib/CodeGen/ItaniumCXXABI.cpp b/clang/lib/CodeGen/ItaniumCXXABI.cpp index de9fd042a9e..c1f892a3173 100644 --- a/clang/lib/CodeGen/ItaniumCXXABI.cpp +++ b/clang/lib/CodeGen/ItaniumCXXABI.cpp @@ -157,9 +157,17 @@ public: Address Ptr, QualType ElementType, const CXXDestructorDecl *Dtor) override; + /// Itanium says that an _Unwind_Exception has to be "double-word" + /// aligned (and thus the end of it is also so-aligned), meaning 16 + /// bytes. Of course, that was written for the actual Itanium, + /// which is a 64-bit platform. Classically, the ABI doesn't really + /// specify the alignment on other platforms, but in practice + /// libUnwind declares the struct with __attribute__((aligned)), so + /// we assume that alignment here. (It's generally 16 bytes, but + /// some targets overwrite it.) CharUnits getAlignmentOfExnObject() { - unsigned Align = CGM.getContext().getTargetInfo().getExnObjectAlignment(); - return CGM.getContext().toCharUnitsFromBits(Align); + auto align = CGM.getContext().getTargetDefaultAlignForAttributeAligned(); + return CGM.getContext().toCharUnitsFromBits(align); } void emitRethrow(CodeGenFunction &CGF, bool isNoReturn) override; |

