Partially revert "[IR] Attribute/AttrBuilder: use Value::MaximumAlignment magic constant"

Apparently makes bots angry.

This reverts commit d096f8d306.
This commit is contained in:
Roman Lebedev 2020-01-23 23:30:09 +03:00
parent fa2fc81d34
commit 1624cba782
No known key found for this signature in database
GPG Key ID: 083C3EBB4A1689E0
3 changed files with 10 additions and 13 deletions

View File

@ -372,15 +372,6 @@ class Sema final {
QualType ResultTy,
ArrayRef<QualType> Args);
/// The maximum alignment, same as in llvm::Value. We duplicate them here
/// because that allows us not to duplicate the constants in clang code,
/// which we must to since we can't directly use the llvm constants.
///
/// This is the greatest alignment value supported by load, store, and alloca
/// instructions, and global values.
static const unsigned MaxAlignmentExponent = 29;
static const unsigned MaximumAlignment = 1u << MaxAlignmentExponent;
public:
typedef OpaquePtr<DeclGroupRef> DeclGroupPtrTy;
typedef OpaquePtr<TemplateName> TemplateTy;

View File

@ -5373,9 +5373,11 @@ bool Sema::SemaBuiltinAssumeAligned(CallExpr *TheCall) {
return Diag(TheCall->getBeginLoc(), diag::err_alignment_not_power_of_two)
<< Arg->getSourceRange();
if (Result > Sema::MaximumAlignment)
// Alignment calculations can wrap around if it's greater than 2**29.
unsigned MaximumAlignment = 536870912;
if (Result > MaximumAlignment)
Diag(TheCall->getBeginLoc(), diag::warn_assume_aligned_too_great)
<< Arg->getSourceRange() << Sema::MaximumAlignment;
<< Arg->getSourceRange() << MaximumAlignment;
}
if (NumArgs > 2) {

View File

@ -3810,9 +3810,13 @@ void Sema::AddAlignedAttr(Decl *D, const AttributeCommonInfo &CI, Expr *E,
}
}
if (AlignVal > Sema::MaximumAlignment) {
// Alignment calculations can wrap around if it's greater than 2**28.
unsigned MaxValidAlignment =
Context.getTargetInfo().getTriple().isOSBinFormatCOFF() ? 8192
: 268435456;
if (AlignVal > MaxValidAlignment) {
Diag(AttrLoc, diag::err_attribute_aligned_too_great)
<< Sema::MaximumAlignment << E->getSourceRange();
<< MaxValidAlignment << E->getSourceRange();
return;
}