OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [gcc/] [testsuite/] [g++.dg/] [opt/] [pr47615.C] - Blame information for rev 774

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 693 jeremybenn
// { dg-do compile }
2
// { dg-options "-O -fstrict-aliasing -ftree-pre -fno-tree-fre -fno-tree-sra" }
3
 
4
typedef __SIZE_TYPE__ size_t;
5
namespace std
6
{
7
  template < class _T1, class > struct pair
8
  {
9
    _T1 first;
10
  };
11
}
12
namespace __gnu_cxx
13
{
14
  template < typename _Tp > class new_allocator
15
  {
16
  public:
17
    typedef size_t size_type;
18
    typedef _Tp * pointer;
19
    typedef _Tp const_pointer;
20
    typedef _Tp & reference;
21
    typedef const _Tp & const_reference;
22
    template < typename _Tp1 > struct rebind
23
    {
24
      typedef new_allocator < _Tp1 > other;
25
    };
26
  };
27
}
28
namespace std
29
{
30
template < typename _Tp > class allocator:
31
  public __gnu_cxx::new_allocator < _Tp >
32
  {};
33
  template < typename, typename, typename > struct binary_function;
34
  template < typename _Tp > struct less:binary_function < _Tp, _Tp, bool >
35
  {};
36
}
37
namespace __gnu_cxx
38
{
39
  namespace typelist
40
  {
41
    struct null_type;
42
    template < typename Root > struct node
43
    {
44
      typedef Root root;
45
    };
46
    template < typename, typename > struct chain;
47
    namespace detail
48
    {
49
      template < typename, int >struct chain_at_index_;
50
      template
51
        <
52
        typename
53
        Hd, typename Tl > struct chain_at_index_ , 0 >
54
      {
55
        typedef Hd type;
56
      };
57
      template
58
        <
59
        typename
60
        Hd, typename Tl, int i > struct chain_at_index_ , i >
61
      {
62
        typedef typename chain_at_index_ < Tl, i - 1 >::type type;
63
      };
64
    }
65
    template < typename Typelist, int i > struct at_index
66
    {
67
      typedef typename Typelist::root root_type;
68
      typedef detail::chain_at_index_ < root_type, i > index_type;
69
      typedef typename index_type::type type;
70
    };
71
    template < typename T1, typename T2 > struct create2
72
    {
73
      typedef node < chain < T1, chain < T2, null_type > > >type;
74
    };
75
  }
76
}
77
namespace std
78
{
79
  namespace tr1
80
  {
81
    template < typename _Tp, _Tp __v > struct integral_constant
82
    {
83
      static const _Tp value = __v;
84
    };
85
    typedef integral_constant < bool, false > false_type;
86
    template < typename, typename > struct is_same:false_type
87
    {};
88
  }
89
}
90
using std::tr1::is_same;
91
namespace __gnu_pbds
92
{
93
  struct null_mapped_type;
94
  struct rb_tree_tag;
95
  namespace detail
96
  {
97
    template < typename, typename, typename > struct basic_tree_policy_base;
98
    template
99
      <
100
      typename
101
      Const_Node_Iterator,
102
      typename
103
      Allocator
104
      >
105
      struct
106
      basic_tree_policy_base
107
      
108
    {};
109
  }
110
  template
111
    < typename, typename, typename, typename > struct null_tree_node_update;
112
template < typename Const_Node_Iterator, typename Node_Iterator, typename, typename Allocator > class tree_order_statistics_node_update:
113
  detail::basic_tree_policy_base
114
    < Const_Node_Iterator, Node_Iterator, Allocator >
115
  {
116
  public:
117
    typedef Allocator allocator_type;
118
    typedef typename allocator_type::size_type size_type;
119
    typedef size_type metadata_type;
120
    typedef Const_Node_Iterator const_node_iterator;
121
    typedef Node_Iterator node_iterator;
122
    typedef
123
      typename
124
      allocator_type::template
125
      rebind < metadata_type >::other::reference metadata_reference;
126
    void operator () (node_iterator, const_node_iterator) const;
127
  };
128
  template
129
    <
130
    typename
131
    Const_Node_Iterator,
132
    class
133
    Node_Iterator,
134
    class
135
    Cmp_Fn,
136
    class
137
    Allocator
138
    >
139
    inline
140
    void
141
    tree_order_statistics_node_update
142
    <
143
    Const_Node_Iterator,
144
    Node_Iterator,
145
    Cmp_Fn,
146
    Allocator
147
    >::operator
148
    () (node_iterator node_it, const_node_iterator end_nd_it) const
149
  {
150
    node_iterator l_child_it;
151
    size_type
152
      l_rank = (l_child_it == end_nd_it) ? : l_child_it.get_metadata ();
153
    node_iterator r_child_it = node_it.get_r_child ();
154
    size_type
155
      r_rank = (r_child_it == end_nd_it) ? : r_child_it.get_metadata ();
156
    const_cast
157
      < metadata_reference > (node_it.get_metadata ()) = l_rank + r_rank;
158
  }
159
  namespace
160
  {
161
    template < typename, typename, typename, bool > struct value_type_base;
162
    template
163
      <
164
      typename
165
      Key,
166
      typename
167
      Allocator
168
      > struct value_type_base 
169
    {
170
      typedef Key value_type;
171
      typedef
172
        typename
173
        Allocator::template rebind < value_type >::other value_type_allocator;
174
      typedef typename value_type_allocator::pointer pointer;
175
      typedef typename value_type_allocator::const_pointer const_pointer;
176
      typedef typename value_type_allocator::reference reference;
177
      typedef typename value_type_allocator::const_reference const_reference;
178
    };
179
    template
180
      <
181
      typename
182
      Key,
183
      typename
184
      Mapped, typename Alloc, bool Store_Extra > struct vt_base_selector
185
    {
186
      typedef value_type_base < Key, Mapped, Alloc, Store_Extra > type;
187
    };
188
    template
189
      <
190
      typename
191
      Key,
192
      typename
193
      Mapped,
194
      typename
195
      Alloc,
196
      bool
197
      Store_Extra
198
      >
199
      struct
200
      types_traits:vt_base_selector < Key, Mapped, Alloc, Store_Extra >::type
201
    {};
202
    template < typename, class, class > struct dumconst_node_iterator;
203
    template
204
      <
205
      typename
206
      Key,
207
      typename
208
      Mapped,
209
      class,
210
      class
211
      Node_And_It_Traits, class Allocator > class bin_search_tree_no_data_
212
    {
213
    protected:
214
      typedef
215
        typename
216
        Allocator::template
217
        rebind
218
        < typename Node_And_It_Traits::node >::other::pointer node_pointer;
219
      typedef
220
        typename
221
        types_traits
222
        < Key, Mapped, Allocator, false >::const_reference const_reference;
223
      typedef typename Node_And_It_Traits::point_iterator point_iterator;
224
      typedef typename Node_And_It_Traits::node_update node_update;
225
      void rotate_right (node_pointer);
226
      template
227
        <
228
        typename
229
        Node_Update_ > void apply_update (node_pointer, Node_Update_ *);
230
    };
231
    template
232
      <
233
      typename
234
      Key,
235
      typename
236
      Mapped,
237
      class
238
      Cmp_Fn,
239
      class
240
      Node_And_It_Traits,
241
      class
242
      Allocator
243
      >
244
      void
245
      bin_search_tree_no_data_
246
      <
247
      Key,
248
      Mapped,
249
      Cmp_Fn, Node_And_It_Traits, Allocator >::rotate_right (node_pointer p_x)
250
    {
251
      node_pointer p_y = p_x->m_p_parent;
252
      p_y->m_p_right = p_x;
253
      apply_update (p_x, this);
254
      apply_update (p_x->m_p_parent, (node_update *) this);
255
    }
256
    template
257
      <
258
      typename
259
      Key,
260
      typename
261
      Mapped,
262
      class
263
      Cmp_Fn,
264
      class
265
      Node_And_It_Traits,
266
      class
267
      Allocator
268
      >
269
      template
270
      <
271
      typename
272
      Node_Update_
273
      >
274
      void
275
      bin_search_tree_no_data_
276
      <
277
      Key,
278
      Mapped,
279
      Cmp_Fn,
280
      Node_And_It_Traits,
281
      Allocator >::apply_update (node_pointer p_nd, Node_Update_ *)
282
    {
283
      node_update ()((p_nd), ((0)));
284
    }
285
  }
286
  namespace detail
287
  {
288
  template < typename Key, typename Mapped, typename Cmp_Fn, typename Node_And_It_Traits, typename Allocator > class rb_tree_no_data_:
289
    bin_search_tree_no_data_
290
      < Key, Mapped, Cmp_Fn, Node_And_It_Traits, Allocator >
291
    {
292
      typedef
293
        bin_search_tree_no_data_
294
        < Key, Mapped, Cmp_Fn, Node_And_It_Traits, Allocator > base_type;
295
      typedef typename base_type::node_pointer node_pointer;
296
    public:
297
      typedef typename base_type::const_reference const_reference;
298
      typedef typename base_type::point_iterator point_iterator;
299
      std::pair < point_iterator, bool > insert (const_reference);
300
      void insert_fixup (node_pointer);
301
    };
302
    template
303
      <
304
      typename
305
      Key,
306
      typename
307
      Mapped,
308
      typename
309
      Cmp_Fn,
310
      typename
311
      Node_And_It_Traits,
312
      typename
313
      Allocator
314
      >
315
      std::pair
316
      <
317
      typename
318
      rb_tree_no_data_
319
      <
320
      Key,
321
      Mapped,
322
      Cmp_Fn,
323
      Node_And_It_Traits,
324
      Allocator
325
      >::point_iterator,
326
      bool
327
      >
328
      rb_tree_no_data_
329
      <
330
      Key,
331
      Mapped,
332
      Cmp_Fn, Node_And_It_Traits, Allocator >::insert (const_reference)
333
    {
334
      std::pair < point_iterator, bool > ins_pair;
335
{
336
        insert_fixup (ins_pair.first.m_p_nd);
337
      }
338
    }
339
    template
340
      <
341
      typename
342
      Key,
343
      typename
344
      Mapped,
345
      typename
346
      Cmp_Fn,
347
      typename
348
      Node_And_It_Traits,
349
      typename
350
      Allocator
351
      >
352
      void
353
      rb_tree_no_data_
354
      <
355
      Key,
356
      Mapped,
357
      Cmp_Fn,
358
      Node_And_It_Traits, Allocator >::insert_fixup (node_pointer p_nd)
359
    {
360
{
361
{
362
{
363
            this->rotate_right (p_nd);
364
          }
365
        }
366
      }
367
    }
368
    template
369
      <
370
      typename,
371
      typename, typename, typename, typename > struct container_base_dispatch;
372
    template
373
      <
374
      typename
375
      Key,
376
      typename
377
      Policy_Tl,
378
      typename
379
      Alloc
380
      >
381
      struct
382
      container_base_dispatch
383
      
384
    {
385
      typedef __gnu_cxx::typelist::at_index < Policy_Tl, 0 > at0;
386
      typedef typename at0::type at0t;
387
      typedef __gnu_cxx::typelist::at_index < Policy_Tl, 1 > at1;
388
      typedef typename at1::type at1t;
389
      typedef
390
        rb_tree_no_data_ < Key, null_mapped_type, at0t, at1t, Alloc > type;
391
    };
392
    template
393
      <
394
      typename
395
      Node_Pointer,
396
      typename,
397
      typename,
398
      typename,
399
      typename, typename, bool, class > class bin_search_tree_const_it_
400
    {
401
    public:
402
      Node_Pointer m_p_nd;
403
    };
404
    template
405
      <
406
      typename
407
      Node,
408
      class
409
      Const_Iterator,
410
      class Iterator, class Allocator > class bin_search_tree_const_node_it_
411
    {
412
      typedef
413
        typename
414
        Allocator::template rebind < Node >::other::pointer node_pointer;
415
    public:
416
      typedef typename Node::metadata_type metadata_type;
417
      typedef
418
        typename
419
        Allocator::template
420
        rebind
421
        < metadata_type >::other::const_reference const_metadata_reference;
422
    bin_search_tree_const_node_it_ (node_pointer p_nd):
423
      m_p_nd ((p_nd))
424
      {}
425
      const_metadata_reference get_metadata ()
426
      {
427
        return (m_p_nd->get_metadata ());
428
      }
429
      bin_search_tree_const_node_it_ ()
430
      {}
431
      bin_search_tree_const_node_it_
432
        < Node, Const_Iterator, Iterator, Allocator > get_r_child ()
433
      {
434
        return ((m_p_nd->m_p_right));
435
      }
436
      bool operator == (bin_search_tree_const_node_it_)
437
      {}
438
      node_pointer m_p_nd;
439
    };
440
    template
441
      <
442
      typename,
443
      typename,
444
      class,
445
      template
446
      <
447
      typename,
448
      class,
449
      class, class > class, class, class > struct bin_search_tree_traits;
450
    template
451
      <
452
      typename
453
      Key,
454
      class
455
      Cmp_Fn,
456
      template
457
      <
458
      typename,
459
      class,
460
      class,
461
      class
462
      >
463
      class
464
      Node_Update,
465
      class
466
      Node,
467
      class
468
      Allocator
469
      >
470
      struct
471
      bin_search_tree_traits
472
      
473
    {
474
      typedef
475
        types_traits < Key, null_mapped_type, Allocator, false > type_traits;
476
      typedef Node node;
477
      typedef
478
        bin_search_tree_const_it_
479
        <
480
        typename
481
        Allocator::template
482
        rebind
483
        <
484
        node
485
        >::other::pointer,
486
        typename
487
        type_traits::value_type,
488
        typename
489
        type_traits::pointer,
490
        typename
491
        type_traits::const_pointer,
492
        typename
493
        type_traits::reference,
494
        typename
495
        type_traits::const_reference, true, Allocator > const_point_iterator;
496
      typedef const_point_iterator point_iterator;
497
      typedef
498
        bin_search_tree_const_node_it_
499
        <
500
        Node,
501
        const_point_iterator, point_iterator, Allocator > const_node_iterator;
502
      typedef const_node_iterator node_iterator;
503
      typedef
504
        Node_Update
505
        < const_node_iterator, node_iterator, Cmp_Fn, Allocator > node_update;
506
    };
507
    template < typename Node_Update, bool > struct tree_metadata_helper
508
    {
509
      typedef typename Node_Update::metadata_type type;
510
    };
511
    template
512
      <
513
      typename
514
      Key,
515
      typename
516
      Data,
517
      class
518
      Cmp_Fn,
519
      template
520
      <
521
      typename,
522
      class,
523
      class,
524
      class
525
      >
526
      class Node_Update, class Allocator > struct tree_node_metadata_selector
527
    {
528
      typedef
529
        dumconst_node_iterator < Key, Data, Allocator > dumconst_node_it;
530
      enum
531
      {
532
        null_update = is_same < Node_Update < dumconst_node_it,
533
        dumconst_node_it,
534
        Cmp_Fn,
535
        Allocator >,
536
        null_tree_node_update < dumconst_node_it,
537
        dumconst_node_it,
538
        Cmp_Fn,
539
        Allocator > >::value
540
      };
541
      typedef
542
        typename
543
        tree_metadata_helper
544
        <
545
        Node_Update
546
        <
547
        dumconst_node_it,
548
        dumconst_node_it, Cmp_Fn, Allocator >, null_update >::type type;
549
    };
550
    template
551
      <
552
      typename,
553
      typename,
554
      class,
555
      template
556
      <
557
      typename,
558
      class, class, class > class, class, class > struct tree_traits;
559
    template < typename Value_Type, class Metadata, class Allocator > struct rb_tree_node_
560
    {
561
      typedef Metadata metadata_type;
562
      typedef
563
        typename
564
        Allocator::template
565
        rebind
566
        <
567
        rb_tree_node_
568
        < Value_Type, Metadata, Allocator > >::other::pointer node_pointer;
569
      typedef
570
        typename
571
        Allocator::template
572
        rebind < metadata_type >::other::reference metadata_reference;
573
        metadata_reference get_metadata ()
574
      {
575
        return m_metadata;
576
      }
577
      node_pointer m_p_right;
578
      node_pointer m_p_parent;
579
      metadata_type m_metadata;
580
    };
581
    template
582
      <
583
      typename
584
      Key,
585
      typename
586
      Mapped,
587
      typename
588
      Cmp_Fn,
589
      template
590
      <
591
      typename,
592
      class,
593
      class,
594
      class
595
      >
596
      class
597
      Node_Update,
598
      typename
599
      Allocator
600
      >
601
      struct
602
      tree_traits
603
      
604
      Mapped,
605
      Cmp_Fn,
606
      Node_Update,
607
      rb_tree_tag,
608
      Allocator
609
      >:bin_search_tree_traits
610
      <
611
      Key,
612
      Mapped,
613
      Cmp_Fn,
614
      Node_Update,
615
      rb_tree_node_
616
      <
617
      typename
618
      types_traits
619
      <
620
      Key,
621
      Mapped,
622
      Allocator,
623
      false
624
      >::value_type,
625
      typename
626
      tree_node_metadata_selector
627
      <
628
      Key,
629
      Mapped, Cmp_Fn, Node_Update, Allocator >::type, Allocator >, Allocator >
630
    {};
631
  }
632
template < typename Key, typename Mapped, typename Tag, typename Policy_Tl, typename Allocator > class container_base:
633
  public
634
    detail::container_base_dispatch
635
    < Key, Mapped, Tag, Policy_Tl, Allocator >::type
636
  {};
637
template < typename Key, typename Mapped, typename Tag, typename, typename Policy_Tl, typename Allocator > class basic_tree:
638
  public
639
    container_base < Key, Mapped, Tag, Policy_Tl, Allocator >
640
  {};
641
  template
642
    <
643
    typename
644
    Key,
645
    typename
646
    Mapped,
647
    typename
648
    Cmp_Fn
649
    =
650
    std::less
651
    <
652
    Key
653
    >,
654
    typename
655
    Tag
656
    =
657
    rb_tree_tag,
658
    template
659
    <
660
    typename,
661
    typename,
662
    typename,
663
    typename
664
    >
665
    class
666
    Node_Update
667
    =
668
    null_tree_node_update,
669
    typename
670
    Allocator
671
    =
672
    std::allocator
673
    <
674
    char
675
    > >class
676
    tree:public
677
    basic_tree
678
    <
679
    Key,
680
    Mapped,
681
    Tag,
682
    detail::tree_traits
683
    <
684
    Key,
685
    Mapped,
686
    Cmp_Fn,
687
    Node_Update,
688
    Tag,
689
    Allocator
690
    >,
691
    typename
692
    __gnu_cxx::typelist::create2
693
    <
694
    Cmp_Fn,
695
    detail::tree_traits
696
    < Key, Mapped, Cmp_Fn, Node_Update, Tag, Allocator > >::type, Allocator >
697
  {};
698
}
699
using namespace std;
700
using namespace __gnu_pbds;
701
typedef
702
  tree
703
  <
704
  int,
705
  null_mapped_type,
706
  less < int >, rb_tree_tag, tree_order_statistics_node_update > set_t;
707
main ()
708
{
709
  set_t s;
710
  s.insert (12);
711
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.