1diff --git a/re2/compile.cc b/re2/compile.cc
2index adb45fd..14e401a 100644
3--- a/re2/compile.cc
4+++ b/re2/compile.cc
5@@ -44,7 +44,7 @@ struct PatchList {
6   static PatchList Append(Prog::Inst *inst0, PatchList l1, PatchList l2);
7 };
8 
9-static PatchList nullPatchList;
10+static PatchList nullPatchList = { 0 };
11 
12 // Returns patch list containing just p.
13 PatchList PatchList::Mk(uint32 p) {
14@@ -106,12 +106,13 @@ struct Frag {
15   uint32 begin;
16   PatchList end;
17 
18-  explicit Frag(LinkerInitialized) {}
19   Frag() : begin(0) { end.p = 0; }  // needed so Frag can go in vector
20   Frag(uint32 begin, PatchList end) : begin(begin), end(end) {}
21 };
22 
23-static Frag kNullFrag(LINKER_INITIALIZED);
24+static Frag NullFrag() {
25+  return Frag();
26+}
27 
28 // Input encodings.
29 enum Encoding {
30@@ -684,13 +685,13 @@ Frag Compiler::PreVisit(Regexp* re, Frag, bool* stop) {
31   if (failed_)
32     *stop = true;
33 
34-  return kNullFrag;  // not used by caller
35+  return NullFrag();  // not used by caller
36 }
37 
38 Frag Compiler::Literal(Rune r, bool foldcase) {
39   switch (encoding_) {
40     default:
41-      return kNullFrag;
42+      return NullFrag();
43 
44     case kEncodingLatin1:
45       return ByteRange(r, r, foldcase);
46@@ -1006,7 +1007,7 @@ Prog* Compiler::Compile(Regexp* re, bool reversed, int64 max_mem) {
47   bool is_anchor_end = IsAnchorEnd(&sre, 0);
48 
49   // Generate fragment for entire regexp.
50-  Frag f = c.WalkExponential(sre, kNullFrag, 2*c.max_inst_);
51+  Frag f = c.WalkExponential(sre, NullFrag(), 2*c.max_inst_);
52   sre->Decref();
53   if (c.failed_)
54     return NULL;
55@@ -1097,7 +1098,7 @@ Prog* Compiler::CompileSet(const RE2::Options& options, RE2::Anchor anchor,
56   c.Setup(pf, options.max_mem(), anchor);
57 
58   // Compile alternation of fragments.
59-  Frag all = c.WalkExponential(re, kNullFrag, 2*c.max_inst_);
60+  Frag all = c.WalkExponential(re, NullFrag(), 2*c.max_inst_);
61   re->Decref();
62   if (c.failed_)
63     return NULL;
64diff --git a/re2/re2.cc b/re2/re2.cc
65index 0da886d..b9e44fc 100644
66--- a/re2/re2.cc
67+++ b/re2/re2.cc
68@@ -32,10 +32,10 @@ namespace re2 {
69 static const int kMaxArgs = 16;
70 static const int kVecSize = 1+kMaxArgs;
71 
72-const VariadicFunction2<bool, const StringPiece&, const RE2&, RE2::Arg, RE2::FullMatchN> RE2::FullMatch;
73-const VariadicFunction2<bool, const StringPiece&, const RE2&, RE2::Arg, RE2::PartialMatchN> RE2::PartialMatch;
74-const VariadicFunction2<bool, StringPiece*, const RE2&, RE2::Arg, RE2::ConsumeN> RE2::Consume;
75-const VariadicFunction2<bool, StringPiece*, const RE2&, RE2::Arg, RE2::FindAndConsumeN> RE2::FindAndConsume;
76+const VariadicFunction2<bool, const StringPiece&, const RE2&, RE2::Arg, RE2::FullMatchN> RE2::FullMatch = {};
77+const VariadicFunction2<bool, const StringPiece&, const RE2&, RE2::Arg, RE2::PartialMatchN> RE2::PartialMatch = {};
78+const VariadicFunction2<bool, StringPiece*, const RE2&, RE2::Arg, RE2::ConsumeN> RE2::Consume = {};
79+const VariadicFunction2<bool, StringPiece*, const RE2&, RE2::Arg, RE2::FindAndConsumeN> RE2::FindAndConsume = {};
80 
81 #define kDefaultMaxMem (8<<20)
82 
83diff --git a/re2/variadic_function.h b/re2/variadic_function.h
84index 8d2b763..7c7d6d5 100644
85--- a/re2/variadic_function.h
86+++ b/re2/variadic_function.h
87@@ -11,8 +11,6 @@ template <typename Result, typename Param0, typename Param1, typename Arg,
88           Result (*Func)(Param0, Param1, const Arg* const [], int count)>
89 class VariadicFunction2 {
90  public:
91-  VariadicFunction2() {}
92-
93   Result operator()(Param0 p0, Param1 p1) const {
94     return Func(p0, p1, 0, 0);
95   }
96