From ad466ef0b81df88550aeca482d16c6c35d17fdd3 Mon Sep 17 00:00:00 2001 From: Benjamin Kramer Date: Fri, 12 Sep 2014 08:56:53 +0000 Subject: [PATCH] Fix an ODR violation consisting of two 'struct Query' in the global namespace. Put them in their own anonymous namespaces. Found by GCC's new -Wodr (PR20915). llvm-svn: 217662 --- lib/Analysis/InstructionSimplify.cpp | 2 ++ lib/Analysis/ValueTracking.cpp | 2 ++ 2 files changed, 4 insertions(+) diff --git a/lib/Analysis/InstructionSimplify.cpp b/lib/Analysis/InstructionSimplify.cpp index cd795fdb781..32bc25ad8c8 100644 --- a/lib/Analysis/InstructionSimplify.cpp +++ b/lib/Analysis/InstructionSimplify.cpp @@ -41,6 +41,7 @@ enum { RecursionLimit = 3 }; STATISTIC(NumExpand, "Number of expansions"); STATISTIC(NumReassoc, "Number of reassociations"); +namespace { struct Query { const DataLayout *DL; const TargetLibraryInfo *TLI; @@ -53,6 +54,7 @@ struct Query { const Instruction *cxti = nullptr) : DL(DL), TLI(tli), DT(dt), AT(at), CxtI(cxti) {} }; +} // end anonymous namespace static Value *SimplifyAndInst(Value *, Value *, const Query &, unsigned); static Value *SimplifyBinOp(unsigned, Value *, Value *, const Query &, diff --git a/lib/Analysis/ValueTracking.cpp b/lib/Analysis/ValueTracking.cpp index 74c862a88dd..f208bb72e2e 100644 --- a/lib/Analysis/ValueTracking.cpp +++ b/lib/Analysis/ValueTracking.cpp @@ -58,6 +58,7 @@ static unsigned getBitWidth(Type *Ty, const DataLayout *TD) { // isKnownToBeAPowerOfTwo (all of which can call computeKnownBits), and so on. typedef SmallPtrSet ExclInvsSet; +namespace { // Simplifying using an assume can only be done in a particular control-flow // context (the context instruction provides that context). If an assume and // the context instruction are not in the same block then the DT helps in @@ -77,6 +78,7 @@ struct Query { ExclInvs.insert(NewExcl); } }; +} // end anonymous namespace // Given the provided Value and, potentially, a context instruction, returned // the preferred context instruction (if any).