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

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [gcc/] [testsuite/] [g++.dg/] [warn/] [forward-inner.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
// Check that the compiler warns about inner-style forward declarations in
2
// contexts where they're not actually illegal, but merely useless.
3
 
4
// Verify warnings for and within classes, and by extension, struct and union.
5
class C1;
6
class C1::C2;      // { dg-error "does not name a type" }
7
class C1::C2::C3;  // { dg-error "has not been declared" }
8
 
9
class C1 {
10
 public:
11
  class C2;
12
  class C2::C3;    // { dg-error "does not name a type" }
13
  class C2 {
14
   public:
15
    class C3;
16
    class C3 { };
17
    class C3;
18
  };
19
  class C2;
20
  class C2::C3;    // { dg-warning "declaration 'class C1::C2::C3' does not declare anything" }
21
};
22
 
23
class C1;
24
class C1::C2;      // { dg-warning "declaration 'class C1::C2' does not declare anything" }
25
class C1::C2::C3;  // { dg-warning "declaration 'class C1::C2::C3' does not declare anything" }
26
 
27
 
28
// Verify warnings for namespace scopes.
29
class N1::C4;      // { dg-error "has not been declared" }
30
class N1::N2::C5;  // { dg-error "has not been declared" }
31
 
32
namespace N1 {
33
  class C4;
34
  class C4 { };
35
  class C4;
36
 
37
  class N2::C5;    // { dg-error "has not been declared" }
38
  namespace N2 {
39
    class C5;
40
    class C5 { };
41
    class C5;
42
  }
43
  class N2::C5;    // { dg-warning "declaration 'class N1::N2::C5' does not declare anything" }
44
}
45
 
46
class N1::C4;      // { dg-warning "declaration 'class N1::C4' does not declare anything" }
47
class N1::N2::C5;  // { dg-warning "declaration 'class N1::N2::C5' does not declare anything" }
48
 
49
 
50
// Verify that using declarations related to namespaces don't generate a
51
// warning.
52
using namespace N1;
53
using namespace N1::N2;
54
 
55
namespace N3 {
56
  using N1::C4;      // Valid using declaration, no warning
57
  using N1::N2::C5;  // Valid using declaration, no warning
58
}
59
 
60
 
61
// Verify that explicit template instantiations, easy to confuse with
62
// forward declarations, don't generate a warning.
63
template
64
class TC6 {
65
 public:
66
  class TC7 { };
67
};
68
 
69
template class TC6::TC7;  // Valid explicit instantiation, no warning
70
 
71
 
72
// Verify that friend declarations, also easy to confuse with forward
73
// declrations, are similarly not warned about.
74
class C8 {
75
 public:
76
  class C9 { };
77
};
78
class C10 {
79
 public:
80
  friend class C8::C9;         // Valid friend declaration, no warning
81
};

powered by: WebSVN 2.1.0

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