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