strub: enable conditional support
[official-gcc.git] / gcc / testsuite / g++.dg / torture / pr49039.C
blobf576cba42d64141e9b6c35531108ccd41438f267
1 // PR tree-optimization/49039
2 // { dg-do run }
4 template <class T1, class T2>
5 struct pair
7   T1 first;
8   T2 second;
9   pair (const T1 & a, const T2 & b):first (a), second (b) {}
12 template <class T1, class T2>
13 inline pair <T1, T2>
14 make_pair (T1 x, T2 y)
16   return pair <T1, T2> (x, y);
19 typedef __SIZE_TYPE__ size_t;
20 struct S
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   }
53 void
54 Test (const char *arg)
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     }
71 int
72 main ()
74   Test ("-");
75   return 0;