mirror of https://github.com/microsoft/clang.git
[Sema] The alignment of an object has an upper bound from the object file format
Don't use the spelling of the alignment attribute to determine whether or not an alignment amount makes sense. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@243233 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
cd794195b9
commit
22e268be98
|
@ -2985,7 +2985,7 @@ void Sema::AddAlignedAttr(SourceRange AttrRange, Decl *D, Expr *E,
|
|||
// C11 6.7.5p6:
|
||||
// An alignment specification of zero has no effect.
|
||||
if (!(TmpAttr.isAlignas() && !Alignment)) {
|
||||
if(!llvm::isPowerOf2_64(Alignment.getZExtValue())) {
|
||||
if (!llvm::isPowerOf2_64(Alignment.getZExtValue())) {
|
||||
Diag(AttrLoc, diag::err_alignment_not_power_of_two)
|
||||
<< E->getSourceRange();
|
||||
return;
|
||||
|
@ -3008,7 +3008,9 @@ void Sema::AddAlignedAttr(SourceRange AttrRange, Decl *D, Expr *E,
|
|||
}
|
||||
|
||||
// Alignment calculations can wrap around if it's greater than 2**28.
|
||||
unsigned MaxValidAlignment = TmpAttr.isDeclspec() ? 8192 : 268435456;
|
||||
unsigned MaxValidAlignment =
|
||||
Context.getTargetInfo().getTriple().isOSBinFormatCOFF() ? 8192
|
||||
: 268435456;
|
||||
if (Alignment.getZExtValue() > MaxValidAlignment) {
|
||||
Diag(AttrLoc, diag::err_attribute_aligned_too_great) << MaxValidAlignment
|
||||
<< E->getSourceRange();
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// RUN: %clang_cc1 %s -fsyntax-only -Wno-unused-value -Wmicrosoft -verify -fms-compatibility
|
||||
// RUN: %clang_cc1 %s -fsyntax-only -Wno-unused-value -Wmicrosoft -verify -fms-compatibility -triple i686-pc-win32
|
||||
|
||||
enum ENUM1; // expected-warning {{forward references to 'enum' types are a Microsoft extension}}
|
||||
enum ENUM1 var1 = 3;
|
||||
|
|
Loading…
Reference in New Issue