diff options
author | Reid Kleckner <rnk@google.com> | 2018-02-12 17:37:06 +0000 |
---|---|---|
committer | Reid Kleckner <rnk@google.com> | 2018-02-12 17:37:06 +0000 |
commit | b0a17edff7f8873a33e304077b7528e2ed09e36b (patch) | |
tree | 07b793cd34e7a2822b708f55cc88ac5db88bc4bc /clang/lib/AST | |
parent | e72d99261f0765a42779497f4e2100a4e40b95ab (diff) | |
download | bcm5719-llvm-b0a17edff7f8873a33e304077b7528e2ed09e36b.tar.gz bcm5719-llvm-b0a17edff7f8873a33e304077b7528e2ed09e36b.zip |
[Sema] Don't mark plain MS enums as fixed
Summary:
This fixes a flaw in our AST: PR27098
MSVC always gives plain enums the underlying type 'int'. Clang does this
as well, but we claim the enum is "fixed", as if the user actually wrote
': int'. It means we end up emitting spurious -Wsign-compare warnings on
code like this:
enum Vals { E1, E2, E3 };
bool f(unsigned v1, Vals v2) {
return v1 == v2;
}
We think 'v2' can take on negative values because we think 'Vals' is
fixed. This fixes that.
Reviewers: rsmith
Subscribers: cfe-commits
Differential Revision: https://reviews.llvm.org/D43110
llvm-svn: 324913
Diffstat (limited to 'clang/lib/AST')
-rw-r--r-- | clang/lib/AST/Type.cpp | 7 |
1 files changed, 1 insertions, 6 deletions
diff --git a/clang/lib/AST/Type.cpp b/clang/lib/AST/Type.cpp index d306f7dd613..2690a3faf72 100644 --- a/clang/lib/AST/Type.cpp +++ b/clang/lib/AST/Type.cpp @@ -1997,12 +1997,7 @@ bool Type::isIncompleteType(NamedDecl **Def) const { EnumDecl *EnumD = cast<EnumType>(CanonicalType)->getDecl(); if (Def) *Def = EnumD; - - // An enumeration with fixed underlying type is complete (C++0x 7.2p3). - if (EnumD->isFixed()) - return false; - - return !EnumD->isCompleteDefinition(); + return !EnumD->isComplete(); } case Record: { // A tagged type (struct/union/enum/class) is incomplete if the decl is a |