ipa-cp: Perform operations in the appropriate types (PR 118097)
[gcc.git] / gcc / testsuite / g++.dg / cpp / embed-6.C
blob3896295213a59361ce1ff29c6d290af170ff0bb5
1 // { dg-do run { target c++14 } }
2 // { dg-options "" }
4 template <typename T>
5 constexpr unsigned char a[] = {
6 #embed __FILE__
7 };
9 template <typename T>
10 constexpr unsigned char
11 foo (int x)
13   return a<T>[x];
15 constexpr unsigned char b = a<unsigned char>[32];
16 constexpr unsigned char c = foo<unsigned char> (42);
17 constexpr unsigned char b2 = a<int>[32];
18 constexpr unsigned char c2 = foo<int> (42);
20 template <typename T>
21 constexpr bool
22 bar ()
24   unsigned char d[] = {
25   #embed __FILE__
26   };
27   d[42] = ' ';
28   d[32] = 'X';
29   d[0] = d[1] + 16;
30   d[sizeof (d) - 1] = d[42] - ' ';
31   for (int i = 0; i < sizeof (d); ++i)
32     switch (i)
33       {
34       case 0:
35         if (d[i] != a<T>[1] + 16)
36           return false;
37         break;
38       case 32:
39         if (d[i] != 'X')
40           return false;
41         break;
42       case 42:
43         if (d[i] != ' ')
44           return false;
45         break;
46       case sizeof (d) - 1:
47         if (d[i] != 0)
48           return false;
49         break;
50       default:
51         if (d[i] != a<T>[i])
52           return false;
53         break;
54       }
55   return true;
58 static_assert (bar<unsigned char> (), "");
59 static_assert (bar<int> (), "");
61 int
62 main ()
64   unsigned char e[] = {
65   #embed __FILE__
66   };
68   if (b != e[32] || c != e[42])
69     __builtin_abort ();
70   if (b2 != b || c2 != c)
71     __builtin_abort ();