summaryrefslogtreecommitdiffstats
path: root/clang/lib/AST/ASTContext.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'clang/lib/AST/ASTContext.cpp')
-rw-r--r--clang/lib/AST/ASTContext.cpp10
1 files changed, 1 insertions, 9 deletions
diff --git a/clang/lib/AST/ASTContext.cpp b/clang/lib/AST/ASTContext.cpp
index f78f2a90a5b..eaf77e96254 100644
--- a/clang/lib/AST/ASTContext.cpp
+++ b/clang/lib/AST/ASTContext.cpp
@@ -1328,15 +1328,6 @@ CharUnits ASTContext::getDeclAlign(const Decl *D, bool ForAlignof) const {
MinWidth <= getTypeSize(cast<ConstantArrayType>(arrayType)))
Align = std::max(Align, Target->getLargeArrayAlign());
}
-
- // Keep track of extra alignment requirements on the array itself, then
- // work with the element type.
- //
- // FIXME: Computing the preferred type alignment for the array element
- // type should not be necessary, but getPreferredTypeAlign returns the
- // wrong thing in some cases (such as 'long long[]' on x86_64).
- Align = std::max(Align, getPreferredTypeAlign(T.getTypePtr()));
- T = BaseT;
}
Align = std::max(Align, getPreferredTypeAlign(T.getTypePtr()));
if (const VarDecl *VD = dyn_cast<VarDecl>(D)) {
@@ -1788,6 +1779,7 @@ unsigned ASTContext::getPreferredTypeAlign(const Type *T) const {
const TypedefType *TT = T->getAs<TypedefType>();
// Double and long long should be naturally aligned if possible.
+ T = T->getBaseElementTypeUnsafe();
if (const ComplexType *CT = T->getAs<ComplexType>())
T = CT->getElementType().getTypePtr();
if (T->isSpecificBuiltinType(BuiltinType::Double) ||
OpenPOWER on IntegriCloud