1 // { dg-lto-do assemble }
2 // { dg-lto-options {{-fpreprocessed -O2 -flto -flto-partition=1to1 -funsigned-char}} }
3 typedef unsigned char uint8;
4 extern const uint8 array[256];
5 static inline bool
g(unsigned char c)6 g (unsigned char c)
7 {
8   return array[c] & 0x80;
9 }
10 
11 class Class1
12 {
13   static bool f1 (char **dst, const char *end, char c);
14   static bool f2 (const char *map, const char **src, char **dst,
15 		 const char *end);
16   static bool f3 (const char *src, char *dst, const char *end);
17 };
18 
19 enum JTipL
20 {
21   KXHR8 = 0, KXNU3, KX_HASH, KXYYZ, KXFI9, KXX3, KXAFA, KXV4Z, KXZ11,
22 };
23 
24 static const char
25   p9t42[256] = { KXYYZ, KXX3, KXX3, KXX3, KXX3, KXX3, KXX3, KXX3,
26       KXX3, KXX3, KXX3, KXX3, KXX3, KXX3, KXX3, KXX3, KXX3, KXX3,
27       KXX3, KXX3, KXX3, KXX3, KXX3, KXX3, KXX3, KXX3, KXX3, KXX3,
28       KXX3, KXX3, KXX3, KXX3, KXX3, KXAFA, KXX3, KX_HASH, KXAFA,
29       KXFI9, KXAFA, KXAFA, KXAFA, KXAFA, KXAFA, KXV4Z, KXAFA, KXAFA,
30       KXAFA, KXV4Z, KXAFA, KXAFA, KXAFA, KXAFA, KXAFA, KXAFA, KXAFA,
31       KXAFA, KXAFA, KXAFA, KXAFA, KXHR8, KXX3, KXV4Z, KXX3, KXNU3,
32       KXAFA, KXAFA, KXAFA, KXAFA, KXAFA, KXAFA, KXAFA, KXAFA, KXAFA,
33       KXAFA, KXAFA, KXAFA, KXAFA, KXAFA, KXAFA, KXAFA, KXAFA, KXAFA,
34       KXAFA, KXAFA, KXAFA, KXAFA, KXAFA, KXAFA, KXAFA, KXAFA, KXAFA,
35       KXX3, KXX3, KXX3, KXX3, KXAFA, KXX3, KXAFA, KXAFA, KXAFA, KXAFA,
36       KXAFA, KXAFA, KXAFA, KXAFA, KXAFA, KXAFA, KXAFA, KXAFA, KXAFA,
37       KXAFA, KXAFA, KXAFA, KXAFA, KXAFA, KXAFA, KXAFA, KXAFA, KXAFA,
38       KXAFA, KXAFA, KXAFA, KXAFA, KXX3, KXX3, KXX3, KXAFA, KXX3, KXX3,
39       KXX3, KXX3, KXX3, KXX3, KXX3, KXX3, KXX3, KXX3, KXX3, KXX3,
40       KXX3, KXX3, KXX3, KXX3, KXX3, KXX3, KXX3, KXX3, KXX3, KXX3,
41       KXX3, KXX3, KXX3, KXX3, KXX3, KXX3, KXX3, KXX3, KXX3, KXX3,
42       KXX3, KXX3, KXX3, KXX3, KXX3, KXX3, KXX3, KXX3, KXX3, KXX3,
43       KXX3, KXX3, KXX3, KXX3, KXX3, KXX3, KXX3, KXX3, KXX3, KXX3,
44       KXX3, KXX3, KXX3, KXX3, KXX3, KXX3, KXX3, KXX3, KXX3, KXX3,
45       KXX3, KXX3, KXX3, KXX3, KXX3, KXX3, KXX3, KXX3, KXX3, KXX3,
46       KXX3, KXX3, KXX3, KXX3, KXX3, KXX3, KXX3, KXX3, KXX3, KXX3,
47       KXX3, KXX3, KXX3, KXX3, KXX3, KXX3, KXX3, KXX3, KXX3, KXX3,
48       KXX3, KXX3, KXX3, KXX3, KXX3, KXX3, KXX3, KXX3, KXX3, KXX3,
49       KXX3, KXX3, KXX3, KXX3, KXX3, KXX3, KXX3, KXX3, KXX3, KXX3,
50       KXX3, KXX3, KXX3, KXX3, KXX3, KXX3, KXX3, KXX3, KXX3, KXX3,
51       KXX3, KXX3, KXX3, KXX3, KXX3, KXX3, KXX3,
52 };
53 
54 inline bool
f2(const char * map,const char ** src,char ** dst,const char * end)55 Class1::f2 (const char *map, const char **src, char **dst,
56 		    const char *end)
57 {
58   if (g ((*src)[1]) && g ((*src)[2]))
59     {
60       char c = (static_cast < unsigned char >((*src)[1])) & 0xf;
61       if (map[c] == KXAFA)
62 	{
63 	}
64       else if (f1 (dst, end, c))
65 	{
66 	}
67     }
68   return true;
69 }
70 
71 bool
f3(const char * src,char * dst,const char * end)72 Class1::f3 (const char *src, char *dst, const char *end)
73 {
74   while (dst < end)
75     {
76       char c = *src;
77       char m = p9t42[c];
78       switch (m)
79 	{
80 	case KXYYZ:
81 	  *dst = '\0';
82 	case KXFI9:
83  	  if (!f2 (p9t42, &src, &dst, end))
84 	    ;
85 	}
86     }
87   return false;
88 }
89