summaryrefslogtreecommitdiffstats
path: root/clang/lib/AST
diff options
context:
space:
mode:
authorReid Kleckner <rnk@google.com>2018-02-12 17:37:06 +0000
committerReid Kleckner <rnk@google.com>2018-02-12 17:37:06 +0000
commitb0a17edff7f8873a33e304077b7528e2ed09e36b (patch)
tree07b793cd34e7a2822b708f55cc88ac5db88bc4bc /clang/lib/AST
parente72d99261f0765a42779497f4e2100a4e40b95ab (diff)
downloadbcm5719-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.cpp7
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
OpenPOWER on IntegriCloud