From 41b454f2e5f13a576ffedf9d79e4b625838997c6 Mon Sep 17 00:00:00 2001 From: John Johansen Date: Wed, 30 May 2012 14:31:41 -0700 Subject: [PATCH] Older C++ compilers complain about the use of a class with a non trivial constructor in a union. Change the ProtoState class to use an init fn instead of a constructor. --- parser/libapparmor_re/hfa.cc | 3 ++- parser/libapparmor_re/hfa.h | 16 ++++++++++++---- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/parser/libapparmor_re/hfa.cc b/parser/libapparmor_re/hfa.cc index 5ace9df97..e779dd38c 100644 --- a/parser/libapparmor_re/hfa.cc +++ b/parser/libapparmor_re/hfa.cc @@ -101,7 +101,8 @@ State *DFA::add_new_state(NodeSet *nodes, State *other) nnodev = nnodes_cache.insert(nnodes); anodes = anodes_cache.insert(anodes); - ProtoState proto(nnodev, anodes); + ProtoState proto; + proto.init(nnodev, anodes); State *state = new State(node_map.size(), proto, other); pair x = node_map.insert(proto, state); if (x.second == false) { diff --git a/parser/libapparmor_re/hfa.h b/parser/libapparmor_re/hfa.h index 9e022a6d0..cbcb46f90 100644 --- a/parser/libapparmor_re/hfa.h +++ b/parser/libapparmor_re/hfa.h @@ -310,7 +310,15 @@ public: hashedNodeVec *nnodes; NodeSet *anodes; - ProtoState(hashedNodeVec *n, NodeSet *a = NULL): nnodes(n), anodes(a) { }; + /* init is used instead of a constructor because ProtoState is used + * in a union + */ + void init(hashedNodeVec *n, NodeSet *a = NULL) + { + nnodes = n; + anodes = a; + } + bool operator<(ProtoState const &rhs)const { if (nnodes == rhs.nnodes) @@ -338,7 +346,7 @@ public: * parition: Is a temporary work variable used during dfa minimization. * it can be replaced with a map, but that is slower and uses more * memory. - * nodes: Is a temporary work variable used during dfa creation. It can + * proto: Is a temporary work variable used during dfa creation. It can * be replaced by using the nodemap, but that is slower */ class State { @@ -379,8 +387,8 @@ public: /* temp storage for State construction */ union { - Partition *partition; - ProtoState proto; + Partition *partition; /* used during minimization */ + ProtoState proto; /* used during creation */ }; };