blob: 1a2e329b2a44411b0695ffa5d88c722ea2db2760 [file] [log] [blame]
Daniel Dunbard7d5f022009-03-24 02:24:46 +00001// RUN: clang-cc -fsyntax-only -verify %s
Sebastian Redl64b45f72009-01-05 20:52:13 +00002#define T(b) (b) ? 1 : -1
3#define F(b) (b) ? -1 : 1
4
5struct NonPOD { NonPOD(int); };
6
7// PODs
8enum Enum { EV };
9struct POD { Enum e; int i; float f; NonPOD* p; };
10typedef int Int;
11typedef Int IntAr[10];
12class Statics { static int priv; static NonPOD np; };
13
14// Not PODs
15struct Derives : POD {};
16struct HasCons { HasCons(int); };
17struct HasAssign { HasAssign operator =(const HasAssign&); };
18struct HasDest { ~HasDest(); };
19class HasPriv { int priv; };
20class HasProt { protected: int prot; };
21struct HasRef { int i; int& ref; HasRef() : i(0), ref(i) {} };
22struct HasNonPOD { NonPOD np; };
23struct HasVirt { virtual void Virt() {}; };
24typedef Derives NonPODAr[10];
25
26void is_pod()
27{
28 int t01[T(__is_pod(int))];
29 int t02[T(__is_pod(Enum))];
30 int t03[T(__is_pod(POD))];
31 int t04[T(__is_pod(Int))];
32 int t05[T(__is_pod(IntAr))];
33 int t06[T(__is_pod(Statics))];
34
35 int t21[F(__is_pod(Derives))];
36 int t22[F(__is_pod(HasCons))];
37 int t23[F(__is_pod(HasAssign))];
38 int t24[F(__is_pod(HasDest))];
39 int t25[F(__is_pod(HasPriv))];
40 int t26[F(__is_pod(HasProt))];
41 int t27[F(__is_pod(HasRef))];
42 int t28[F(__is_pod(HasNonPOD))];
43 int t29[F(__is_pod(HasVirt))];
44 int t30[F(__is_pod(NonPODAr))];
45}
46
47union Union { int i; float f; };
48typedef Derives ClassType;
49
50void is_class()
51{
52 int t01[T(__is_class(Derives))];
53 int t02[T(__is_class(HasPriv))];
54 int t03[T(__is_class(ClassType))];
55
56 int t11[F(__is_class(int))];
57 int t12[F(__is_class(Enum))];
58 int t13[F(__is_class(Int))];
59 int t14[F(__is_class(IntAr))];
60 int t15[F(__is_class(NonPODAr))];
61 int t16[F(__is_class(Union))];
62}
63
64typedef Union UnionAr[10];
65typedef Union UnionType;
66
67void is_union()
68{
69 int t01[T(__is_union(Union))];
70 int t02[T(__is_union(UnionType))];
71
72 int t11[F(__is_union(int))];
73 int t12[F(__is_union(Enum))];
74 int t13[F(__is_union(Int))];
75 int t14[F(__is_union(IntAr))];
76 int t15[F(__is_union(UnionAr))];
77}
78
79typedef Enum EnumType;
80
81void is_enum()
82{
83 int t01[T(__is_enum(Enum))];
84 int t02[T(__is_enum(EnumType))];
85
86 int t11[F(__is_enum(int))];
87 int t12[F(__is_enum(Union))];
88 int t13[F(__is_enum(Int))];
89 int t14[F(__is_enum(IntAr))];
90 int t15[F(__is_enum(UnionAr))];
91 int t16[F(__is_enum(Derives))];
92 int t17[F(__is_enum(ClassType))];
93}
94
95struct Polymorph { virtual void f(); };
96struct InheritPolymorph : Polymorph {};
97
98void is_polymorphic()
99{
100 int t01[T(__is_polymorphic(Polymorph))];
101 int t02[T(__is_polymorphic(InheritPolymorph))];
102
103 int t11[F(__is_polymorphic(int))];
104 int t12[F(__is_polymorphic(Union))];
105 int t13[F(__is_polymorphic(Int))];
106 int t14[F(__is_polymorphic(IntAr))];
107 int t15[F(__is_polymorphic(UnionAr))];
108 int t16[F(__is_polymorphic(Derives))];
109 int t17[F(__is_polymorphic(ClassType))];
110 int t18[F(__is_polymorphic(Enum))];
111}