13573b2c84372d9484296fa658f5276f6c09acb92Daniel Dunbar// RUN: %clang_cc1 -fsyntax-only -verify %s
29f1a3df47b8c63c2f90486b1cdde526d6b461c06Sebastian Redl
39f1a3df47b8c63c2f90486b1cdde526d6b461c06Sebastian Redlenum Enum { val = 1 };
49f1a3df47b8c63c2f90486b1cdde526d6b461c06Sebastian Redltemplate <Enum v> struct C {
59f1a3df47b8c63c2f90486b1cdde526d6b461c06Sebastian Redl  typedef C<v> Self;
69f1a3df47b8c63c2f90486b1cdde526d6b461c06Sebastian Redl};
79f1a3df47b8c63c2f90486b1cdde526d6b461c06Sebastian Redltemplate struct C<val>;
8b5da9e3ee99263f02e3ea270b8679f12078f5f06Douglas Gregor
9b5da9e3ee99263f02e3ea270b8679f12078f5f06Douglas Gregortemplate<typename T>
10b5da9e3ee99263f02e3ea270b8679f12078f5f06Douglas Gregorstruct get_size {
11b5da9e3ee99263f02e3ea270b8679f12078f5f06Douglas Gregor  static const unsigned value = sizeof(T);
12b5da9e3ee99263f02e3ea270b8679f12078f5f06Douglas Gregor};
13b5da9e3ee99263f02e3ea270b8679f12078f5f06Douglas Gregor
14b5da9e3ee99263f02e3ea270b8679f12078f5f06Douglas Gregortemplate<typename T>
15b5da9e3ee99263f02e3ea270b8679f12078f5f06Douglas Gregorstruct X0 {
16b5da9e3ee99263f02e3ea270b8679f12078f5f06Douglas Gregor  enum {
17b5da9e3ee99263f02e3ea270b8679f12078f5f06Douglas Gregor    Val1 = get_size<T>::value,
18b5da9e3ee99263f02e3ea270b8679f12078f5f06Douglas Gregor    Val2,
19b5da9e3ee99263f02e3ea270b8679f12078f5f06Douglas Gregor    SumOfValues = Val1 + Val2
20b5da9e3ee99263f02e3ea270b8679f12078f5f06Douglas Gregor  };
21b5da9e3ee99263f02e3ea270b8679f12078f5f06Douglas Gregor};
22b5da9e3ee99263f02e3ea270b8679f12078f5f06Douglas Gregor
23b5da9e3ee99263f02e3ea270b8679f12078f5f06Douglas GregorX0<int> x0i;
24c53f982bba536ed5513cdc57883d05ca2dab55cfDouglas Gregor
25c53f982bba536ed5513cdc57883d05ca2dab55cfDouglas Gregornamespace rdar8020920 {
26c53f982bba536ed5513cdc57883d05ca2dab55cfDouglas Gregor  template<typename T>
27c53f982bba536ed5513cdc57883d05ca2dab55cfDouglas Gregor  struct X {
28c53f982bba536ed5513cdc57883d05ca2dab55cfDouglas Gregor    enum { e0 = 32 };
29c53f982bba536ed5513cdc57883d05ca2dab55cfDouglas Gregor
30c53f982bba536ed5513cdc57883d05ca2dab55cfDouglas Gregor    unsigned long long bitfield : e0;
31c53f982bba536ed5513cdc57883d05ca2dab55cfDouglas Gregor
32c53f982bba536ed5513cdc57883d05ca2dab55cfDouglas Gregor    void f(int j) {
33c53f982bba536ed5513cdc57883d05ca2dab55cfDouglas Gregor      bitfield + j;
34c53f982bba536ed5513cdc57883d05ca2dab55cfDouglas Gregor    }
35c53f982bba536ed5513cdc57883d05ca2dab55cfDouglas Gregor  };
36c53f982bba536ed5513cdc57883d05ca2dab55cfDouglas Gregor}
37