1f221d161ae559ca0395fa5920c36c4c4a688e380Richard Smith// RUN: %clang_cc1 -std=c++1y -verify %s 2f221d161ae559ca0395fa5920c36c4c4a688e380Richard Smith 3f221d161ae559ca0395fa5920c36c4c4a688e380Richard Smith// expected-no-diagnostics 4f221d161ae559ca0395fa5920c36c4c4a688e380Richard Smithconstexpr void copy(const char *from, unsigned long count, char *to) { 5f221d161ae559ca0395fa5920c36c4c4a688e380Richard Smith unsigned long n = (count + 7) / 8; 6f221d161ae559ca0395fa5920c36c4c4a688e380Richard Smith switch(count % 8) { 7f221d161ae559ca0395fa5920c36c4c4a688e380Richard Smith case 0: do { *to++ = *from++; 8f221d161ae559ca0395fa5920c36c4c4a688e380Richard Smith case 7: *to++ = *from++; 9f221d161ae559ca0395fa5920c36c4c4a688e380Richard Smith case 6: *to++ = *from++; 10f221d161ae559ca0395fa5920c36c4c4a688e380Richard Smith case 5: *to++ = *from++; 11f221d161ae559ca0395fa5920c36c4c4a688e380Richard Smith case 4: *to++ = *from++; 12f221d161ae559ca0395fa5920c36c4c4a688e380Richard Smith case 3: *to++ = *from++; 13f221d161ae559ca0395fa5920c36c4c4a688e380Richard Smith case 2: *to++ = *from++; 14f221d161ae559ca0395fa5920c36c4c4a688e380Richard Smith case 1: *to++ = *from++; 15f221d161ae559ca0395fa5920c36c4c4a688e380Richard Smith } while(--n > 0); 16f221d161ae559ca0395fa5920c36c4c4a688e380Richard Smith } 17f221d161ae559ca0395fa5920c36c4c4a688e380Richard Smith} 18f221d161ae559ca0395fa5920c36c4c4a688e380Richard Smith 19f221d161ae559ca0395fa5920c36c4c4a688e380Richard Smithstruct S { 20f221d161ae559ca0395fa5920c36c4c4a688e380Richard Smith char stuff[14]; 21f221d161ae559ca0395fa5920c36c4c4a688e380Richard Smith constexpr S() : stuff{} { 22f221d161ae559ca0395fa5920c36c4c4a688e380Richard Smith copy("Hello, world!", 14, stuff); 23f221d161ae559ca0395fa5920c36c4c4a688e380Richard Smith } 24f221d161ae559ca0395fa5920c36c4c4a688e380Richard Smith}; 25f221d161ae559ca0395fa5920c36c4c4a688e380Richard Smith 26f221d161ae559ca0395fa5920c36c4c4a688e380Richard Smithconstexpr bool streq(const char *a, const char *b) { 27f221d161ae559ca0395fa5920c36c4c4a688e380Richard Smith while (*a && *a == *b) ++a, ++b; 28f221d161ae559ca0395fa5920c36c4c4a688e380Richard Smith return *a == *b; 29f221d161ae559ca0395fa5920c36c4c4a688e380Richard Smith} 30f221d161ae559ca0395fa5920c36c4c4a688e380Richard Smith 31f221d161ae559ca0395fa5920c36c4c4a688e380Richard Smithstatic_assert(streq(S().stuff, "Hello, world!"), "should be same"); 32f221d161ae559ca0395fa5920c36c4c4a688e380Richard Smithstatic_assert(!streq(S().stuff, "Something else"), "should be different"); 33