mirror of
https://github.com/Gericom/teak-llvm.git
synced 2025-06-26 14:58:59 -04:00

integral promotion only if it converts to the underlying type or its promoted type, not if it converts to the promoted type that the bitfield would have it if were of the underlying type. llvm-svn: 233457
39 lines
784 B
C++
39 lines
784 B
C++
// RUN: %clang_cc1 -fsyntax-only -pedantic -std=c++11 -verify -triple x86_64-apple-darwin %s
|
|
|
|
enum E {};
|
|
|
|
struct Z {};
|
|
typedef int Integer;
|
|
|
|
struct X {
|
|
enum E : 1;
|
|
enum E : Z; // expected-error{{invalid underlying type}}
|
|
enum E2 : int;
|
|
enum E3 : Integer;
|
|
};
|
|
|
|
struct Y {
|
|
enum E : int(2);
|
|
enum E : Z(); // expected-error{{integral constant expression must have integral or unscoped enumeration type, not 'Z'}}
|
|
};
|
|
|
|
namespace pr18587 {
|
|
struct A {
|
|
enum class B {
|
|
C
|
|
};
|
|
};
|
|
const int C = 4;
|
|
struct D {
|
|
A::B : C;
|
|
};
|
|
}
|
|
|
|
enum WithUnderlying : unsigned { wu_value };
|
|
struct WithUnderlyingBitfield {
|
|
WithUnderlying wu : 3;
|
|
} wu = { wu_value };
|
|
int want_unsigned(unsigned);
|
|
int want_unsigned(int) = delete;
|
|
int check_enum_bitfield_promotes_correctly = want_unsigned(wu.wu);
|