stevewan created this revision. stevewan requested review of this revision. Herald added a project: clang. Herald added a subscriber: cfe-commits.
The current check for typedef is naive and doesn't deal with any convoluted cases. This patch makes use of the new 'AlignRequirement' enum field from 'TypeInfo' to determine whether or not this is an 'aligned' attribute on a typedef. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D109387 Files: clang/lib/AST/ASTContext.cpp Index: clang/lib/AST/ASTContext.cpp =================================================================== --- clang/lib/AST/ASTContext.cpp +++ clang/lib/AST/ASTContext.cpp @@ -2497,8 +2497,10 @@ const RecordDecl *RD = RT->getDecl(); // When used as part of a typedef, or together with a 'packed' attribute, - // the 'aligned' attribute can be used to decrease alignment. - if ((TI.isAlignRequired() && T->getAs<TypedefType>() != nullptr) || + // the 'aligned' attribute can be used to decrease alignment. Note that the + // 'packed' case is already taken into consideration when computing the + // alignment, we only need to handle the typedef case here. + if (TI.AlignRequirement == AlignRequirementKind::RequiredByTypedef || RD->isInvalidDecl()) return ABIAlign;
Index: clang/lib/AST/ASTContext.cpp =================================================================== --- clang/lib/AST/ASTContext.cpp +++ clang/lib/AST/ASTContext.cpp @@ -2497,8 +2497,10 @@ const RecordDecl *RD = RT->getDecl(); // When used as part of a typedef, or together with a 'packed' attribute, - // the 'aligned' attribute can be used to decrease alignment. - if ((TI.isAlignRequired() && T->getAs<TypedefType>() != nullptr) || + // the 'aligned' attribute can be used to decrease alignment. Note that the + // 'packed' case is already taken into consideration when computing the + // alignment, we only need to handle the typedef case here. + if (TI.AlignRequirement == AlignRequirementKind::RequiredByTypedef || RD->isInvalidDecl()) return ABIAlign;
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits