Author: majnemer Date: Thu Oct 8 02:45:35 2015 New Revision: 249667 URL: http://llvm.org/viewvc/llvm-project?rev=249667&view=rev Log: [Sema] Tweak incomplete enum types on MSVC ABI targets
Enums without an explicit, fixed, underlying type are implicitly given a fixed 'int' type for ABI compatibility with MSVC. However, we can enforce the standard-mandated rules on these types as-if we didn't know this fact if the tag is not part of a definition. Modified: cfe/trunk/lib/Sema/SemaDecl.cpp cfe/trunk/test/CodeGen/volatile-1.c cfe/trunk/test/Parser/cxx0x-attributes.cpp cfe/trunk/test/Sema/cast-incomplete.c cfe/trunk/test/Sema/decl-in-prototype.c Modified: cfe/trunk/lib/Sema/SemaDecl.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDecl.cpp?rev=249667&r1=249666&r2=249667&view=diff ============================================================================== --- cfe/trunk/lib/Sema/SemaDecl.cpp (original) +++ cfe/trunk/lib/Sema/SemaDecl.cpp Thu Oct 8 02:45:35 2015 @@ -11769,8 +11769,10 @@ Decl *Sema::ActOnTag(Scope *S, unsigned EnumUnderlying = Context.IntTy.getTypePtr(); } else if (Context.getTargetInfo().getCXXABI().isMicrosoft()) { - // Microsoft enums are always of int type. - EnumUnderlying = Context.IntTy.getTypePtr(); + if (getLangOpts().MSVCCompat || TUK == TUK_Definition) { + // Microsoft enums are always of int type. + EnumUnderlying = Context.IntTy.getTypePtr(); + } } } Modified: cfe/trunk/test/CodeGen/volatile-1.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/volatile-1.c?rev=249667&r1=249666&r2=249667&view=diff ============================================================================== --- cfe/trunk/test/CodeGen/volatile-1.c (original) +++ cfe/trunk/test/CodeGen/volatile-1.c Thu Oct 8 02:45:35 2015 @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -triple %itanium_abi_triple -Wno-return-type -Wno-unused-value -emit-llvm %s -o - | FileCheck %s +// RUN: %clang_cc1 -Wno-return-type -Wno-unused-value -emit-llvm %s -o - | FileCheck %s // CHECK: @i = common global [[INT:i[0-9]+]] 0 volatile int i, j, k; Modified: cfe/trunk/test/Parser/cxx0x-attributes.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Parser/cxx0x-attributes.cpp?rev=249667&r1=249666&r2=249667&view=diff ============================================================================== --- cfe/trunk/test/Parser/cxx0x-attributes.cpp (original) +++ cfe/trunk/test/Parser/cxx0x-attributes.cpp Thu Oct 8 02:45:35 2015 @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -triple %itanium_abi_triple -fcxx-exceptions -fexceptions -fsyntax-only -verify -std=c++11 -Wc++14-compat %s +// RUN: %clang_cc1 -fcxx-exceptions -fexceptions -fsyntax-only -verify -std=c++11 -Wc++14-compat %s // Need std::initializer_list namespace std { Modified: cfe/trunk/test/Sema/cast-incomplete.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/cast-incomplete.c?rev=249667&r1=249666&r2=249667&view=diff ============================================================================== --- cfe/trunk/test/Sema/cast-incomplete.c (original) +++ cfe/trunk/test/Sema/cast-incomplete.c Thu Oct 8 02:45:35 2015 @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -triple %itanium_abi_triple -fsyntax-only %s -verify +// RUN: %clang_cc1 -fsyntax-only %s -verify // PR5692 enum x; // expected-note {{forward declaration}} Modified: cfe/trunk/test/Sema/decl-in-prototype.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/decl-in-prototype.c?rev=249667&r1=249666&r2=249667&view=diff ============================================================================== --- cfe/trunk/test/Sema/decl-in-prototype.c (original) +++ cfe/trunk/test/Sema/decl-in-prototype.c Thu Oct 8 02:45:35 2015 @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -triple %itanium_abi_triple -fsyntax-only -verify %s +// RUN: %clang_cc1 -triple %ms_abi_triple -fsyntax-only -verify %s const int AA = 5; _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits