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

Subversion Repositories openrisc_me

[/] [openrisc/] [trunk/] [gnu-src/] [gcc-4.2.2/] [gcc/] [testsuite/] [g++.dg/] [tree-ssa/] [pr27549.C] - Blame information for rev 154

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 149 jeremybenn
// PR tree-optimization/27549
2
// { dg-do compile }
3
// { dg-options "-O2" }
4
 
5
typedef __SIZE_TYPE__ size_t;
6
 
7
struct E
8
{
9
  virtual ~E () {}
10
  virtual size_t e () const = 0;
11
  virtual void f (char *x) const = 0;
12
};
13
 
14
struct F : public E
15
{
16
  virtual ~F () {}
17
  virtual size_t e () const { return 0; }
18
  virtual void f (char *x) const { *x = '\0'; }
19
};
20
 
21
struct S
22
{
23
  S () { a = new char[32]; b = 32; c = 0; a[0] = 0; }
24
  void s (const char *x, size_t y) { v (c + y + 1); __builtin_memcpy(a + c, x, y); c += y; a[c] = '\0'; }
25
  void s (const E *x) { size_t l = x->e(); v (c + l + 1); x->f (a + c); c += l; }
26
  const char *t () { return a; }
27
  void v (size_t n)
28
    {
29
      if (b >= n) return;
30
 
31
      size_t b2 = b;
32
      char *a2 = a;
33
 
34
      for (;;)
35
        {
36
          b *= 2;
37
          if (b >= n)
38
            break;
39
        }
40
 
41
      a = new char[b];
42
 
43
      if (b2)
44
        {
45
          __builtin_memcpy(a, a2, c);
46
          a2[0] = 0;
47
          for (size_t i = 1; i < b2; i++)
48
            a2[i] = a2[i - 1];
49
          delete[] a2;
50
        }
51
    }
52
 
53
  ~S ()
54
    {
55
      if (b)
56
        {
57
          a[0] = 0;
58
          for (size_t i = 1; i < b; i++)
59
            a[i] = a[i - 1];
60
        }
61
      delete[] a;
62
    }
63
  char * a;
64
  size_t b, c;
65
};
66
 
67
const char *p;
68
size_t q;
69
const F u;
70
 
71
const char *
72
foo ()
73
{
74
  S s;
75
  s.s (p, q);
76
  s.s (&u);
77
  return s.t ();
78
}

powered by: WebSVN 2.1.0

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