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