mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2025-03-02 23:50:19 +00:00
With packed enums, an enumerator's value may be stored in more bits
than the enumeration type itself takes. Fixes PR7477. llvm-svn: 107163
This commit is contained in:
parent
5bee07ec68
commit
56980d688b
@ -836,6 +836,8 @@ Sema::ActOnFinishSwitchStmt(SourceLocation SwitchLoc, StmtArg Switch,
|
||||
llvm::APSInt Val = (*EDI)->getInitVal();
|
||||
if(Val.getBitWidth() < CondWidth)
|
||||
Val.extend(CondWidth);
|
||||
else if (Val.getBitWidth() > CondWidth)
|
||||
Val.trunc(CondWidth);
|
||||
Val.setIsSigned(CondIsSigned);
|
||||
EnumVals.push_back(std::make_pair(Val, (*EDI)));
|
||||
}
|
||||
|
16
clang/test/Sema/enum-packed.c
Normal file
16
clang/test/Sema/enum-packed.c
Normal file
@ -0,0 +1,16 @@
|
||||
// RUN: %clang_cc1 -fsyntax-only -verify %s
|
||||
|
||||
// PR7477
|
||||
enum __attribute__((packed)) E {
|
||||
Ea, Eb, Ec, Ed
|
||||
};
|
||||
|
||||
void test_E(enum E e) {
|
||||
switch (e) {
|
||||
case Ea:
|
||||
case Eb:
|
||||
case Ec:
|
||||
case Ed:
|
||||
break;
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user