annotate gcc/testsuite/g++.dg/torture/pr49039.C @ 131:84e7813d76e9

gcc-8.2
author mir3636
date Thu, 25 Oct 2018 07:37:49 +0900
parents 04ced10e8804
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 // PR tree-optimization/49039
kono
parents:
diff changeset
2 // { dg-do run }
kono
parents:
diff changeset
3
kono
parents:
diff changeset
4 template <class T1, class T2>
kono
parents:
diff changeset
5 struct pair
kono
parents:
diff changeset
6 {
kono
parents:
diff changeset
7 T1 first;
kono
parents:
diff changeset
8 T2 second;
kono
parents:
diff changeset
9 pair (const T1 & a, const T2 & b):first (a), second (b) {}
kono
parents:
diff changeset
10 };
kono
parents:
diff changeset
11
kono
parents:
diff changeset
12 template <class T1, class T2>
kono
parents:
diff changeset
13 inline pair <T1, T2>
kono
parents:
diff changeset
14 make_pair (T1 x, T2 y)
kono
parents:
diff changeset
15 {
kono
parents:
diff changeset
16 return pair <T1, T2> (x, y);
kono
parents:
diff changeset
17 }
kono
parents:
diff changeset
18
kono
parents:
diff changeset
19 typedef __SIZE_TYPE__ size_t;
kono
parents:
diff changeset
20 struct S
kono
parents:
diff changeset
21 {
kono
parents:
diff changeset
22 const char *Data;
kono
parents:
diff changeset
23 size_t Length;
kono
parents:
diff changeset
24 static size_t min (size_t a, size_t b) { return a < b ? a : b; }
kono
parents:
diff changeset
25 static size_t max (size_t a, size_t b) { return a > b ? a : b; }
kono
parents:
diff changeset
26 S () :Data (0), Length (0) { }
kono
parents:
diff changeset
27 S (const char *Str) : Data (Str), Length (__builtin_strlen (Str)) {}
kono
parents:
diff changeset
28 S (const char *data, size_t length) : Data (data), Length (length) {}
kono
parents:
diff changeset
29 bool empty () const { return Length == 0; }
kono
parents:
diff changeset
30 size_t size () const { return Length; }
kono
parents:
diff changeset
31 S slice (size_t Start, size_t End) const
kono
parents:
diff changeset
32 {
kono
parents:
diff changeset
33 Start = min (Start, Length);
kono
parents:
diff changeset
34 End = min (max (Start, End), Length);
kono
parents:
diff changeset
35 return S (Data + Start, End - Start);
kono
parents:
diff changeset
36 }
kono
parents:
diff changeset
37 pair <S, S> split (char Separator) const
kono
parents:
diff changeset
38 {
kono
parents:
diff changeset
39 size_t Idx = find (Separator);
kono
parents:
diff changeset
40 if (Idx == ~size_t (0))
kono
parents:
diff changeset
41 return make_pair (*this, S ());
kono
parents:
diff changeset
42 return make_pair (slice (0, Idx), slice (Idx + 1, ~size_t (0)));
kono
parents:
diff changeset
43 }
kono
parents:
diff changeset
44 size_t find (char C, size_t From = 0) const
kono
parents:
diff changeset
45 {
kono
parents:
diff changeset
46 for (size_t i = min (From, Length), e = Length; i != e; ++i)
kono
parents:
diff changeset
47 if (Data[i] == C)
kono
parents:
diff changeset
48 return i;
kono
parents:
diff changeset
49 return ~size_t (0);
kono
parents:
diff changeset
50 }
kono
parents:
diff changeset
51 };
kono
parents:
diff changeset
52
kono
parents:
diff changeset
53 void
kono
parents:
diff changeset
54 Test (const char *arg)
kono
parents:
diff changeset
55 {
kono
parents:
diff changeset
56 S Desc (arg);
kono
parents:
diff changeset
57 while (!Desc.empty ())
kono
parents:
diff changeset
58 {
kono
parents:
diff changeset
59 pair <S, S> Split = Desc.split ('-');
kono
parents:
diff changeset
60 S Token = Split.first;
kono
parents:
diff changeset
61 Desc = Split.second;
kono
parents:
diff changeset
62 if (Token.empty ())
kono
parents:
diff changeset
63 continue;
kono
parents:
diff changeset
64 Split = Token.split (':');
kono
parents:
diff changeset
65 S Specifier = Split.first;
kono
parents:
diff changeset
66 if (Specifier.empty ())
kono
parents:
diff changeset
67 __builtin_abort ();
kono
parents:
diff changeset
68 }
kono
parents:
diff changeset
69 }
kono
parents:
diff changeset
70
kono
parents:
diff changeset
71 int
kono
parents:
diff changeset
72 main ()
kono
parents:
diff changeset
73 {
kono
parents:
diff changeset
74 Test ("-");
kono
parents:
diff changeset
75 return 0;
kono
parents:
diff changeset
76 }