Bug 1814798 - pt 1. Add bool to enable/disable PHC at runtime r=glandium
[gecko.git] / build / clang-plugin / tests / TestParamTraitsEnum.cpp
bloba250250bfe49041470ea87578b081dc2f51cb363
1 typedef enum {
2 BadFirst,
3 BadSecond,
4 BadThird
5 } BadEnum;
7 typedef enum {
8 NestedFirst,
9 NestedSecond
10 } NestedBadEnum;
12 typedef enum {
13 GoodFirst,
14 GoodSecond,
15 GoodLast
16 } GoodEnum;
18 enum RawEnum {
19 RawFirst,
20 RawLast
23 enum class ClassEnum {
24 ClassFirst,
25 ClassLast
28 template <class P> struct ParamTraits;
30 // Simplified EnumSerializer etc. from IPCMessageUtils.h
31 template <typename E, typename EnumValidator>
32 struct EnumSerializer {
33 typedef E paramType;
36 template <typename E,
37 E MinLegal,
38 E HighBound>
39 class ContiguousEnumValidator
40 {};
42 template <typename E,
43 E MinLegal,
44 E HighBound>
45 struct ContiguousEnumSerializer
46 : EnumSerializer<E,
47 ContiguousEnumValidator<E, MinLegal, HighBound>>
48 {};
50 // Typical ParamTraits implementation that should be avoided
51 template<>
52 struct ParamTraits<ClassEnum> // expected-error {{Custom ParamTraits implementation for an enum type}} expected-note {{Please use a helper class for example ContiguousEnumSerializer}}
54 typedef ClassEnum paramType;
57 template<>
58 struct ParamTraits<enum RawEnum> // expected-error {{Custom ParamTraits implementation for an enum type}} expected-note {{Please use a helper class for example ContiguousEnumSerializer}}
60 typedef enum RawEnum paramType;
63 template<>
64 struct ParamTraits<BadEnum> // expected-error {{Custom ParamTraits implementation for an enum type}} expected-note {{Please use a helper class for example ContiguousEnumSerializer}}
66 typedef BadEnum paramType;
69 // Make sure the analysis catches nested typedefs
70 typedef NestedBadEnum NestedDefLevel1;
71 typedef NestedDefLevel1 NestedDefLevel2;
73 template<>
74 struct ParamTraits<NestedDefLevel2> // expected-error {{Custom ParamTraits implementation for an enum type}} expected-note {{Please use a helper class for example ContiguousEnumSerializer}}
76 typedef NestedDefLevel2 paramType;
79 // Make sure a non enum typedef is not accidentally flagged
80 typedef int IntTypedef;
82 template<>
83 struct ParamTraits<IntTypedef>
85 typedef IntTypedef paramType;
88 // Make sure ParamTraits using helper classes are not flagged
89 template<>
90 struct ParamTraits<GoodEnum>
91 : public ContiguousEnumSerializer<GoodEnum,
92 GoodEnum::GoodFirst,
93 GoodEnum::GoodLast>
94 {};