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