[Sema] Don't mark plain MS enums as fixed
authorReid Kleckner <rnk@google.com>
Mon, 12 Feb 2018 17:37:06 +0000 (17:37 +0000)
committerReid Kleckner <rnk@google.com>
Mon, 12 Feb 2018 17:37:06 +0000 (17:37 +0000)
commitb0a17edff7f8873a33e304077b7528e2ed09e36b
tree07b793cd34e7a2822b708f55cc88ac5db88bc4bc
parente72d99261f0765a42779497f4e2100a4e40b95ab
[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
clang/include/clang/AST/Decl.h
clang/include/clang/Sema/Sema.h
clang/lib/AST/Type.cpp
clang/lib/Sema/SemaDecl.cpp
clang/lib/Sema/SemaTemplateInstantiateDecl.cpp
clang/test/Sema/sign-compare-enum.c