diff options
-rw-r--r-- | llvm/test/tools/llvm-diff/anon-func.ll | 8 | ||||
-rw-r--r-- | llvm/tools/llvm-diff/DifferenceEngine.cpp | 28 |
2 files changed, 34 insertions, 2 deletions
diff --git a/llvm/test/tools/llvm-diff/anon-func.ll b/llvm/test/tools/llvm-diff/anon-func.ll new file mode 100644 index 00000000000..a17d1d3015e --- /dev/null +++ b/llvm/test/tools/llvm-diff/anon-func.ll @@ -0,0 +1,8 @@ +; RUN: llvm-diff %s %s 2>&1 | FileCheck %s + +; CHECK: not comparing 1 anonymous functions in the left module and 1 in the right module + +define void @0() { + ret void +} + diff --git a/llvm/tools/llvm-diff/DifferenceEngine.cpp b/llvm/tools/llvm-diff/DifferenceEngine.cpp index af0a055ea21..5be533d9af3 100644 --- a/llvm/tools/llvm-diff/DifferenceEngine.cpp +++ b/llvm/tools/llvm-diff/DifferenceEngine.cpp @@ -686,9 +686,18 @@ void DifferenceEngine::diff(Module *L, Module *R) { StringSet<> LNames; SmallVector<std::pair<Function*,Function*>, 20> Queue; + unsigned LeftAnonCount = 0; + unsigned RightAnonCount = 0; + for (Module::iterator I = L->begin(), E = L->end(); I != E; ++I) { Function *LFn = &*I; - LNames.insert(LFn->getName()); + StringRef Name = LFn->getName(); + if (Name.empty()) { + ++LeftAnonCount; + continue; + } + + LNames.insert(Name); if (Function *RFn = R->getFunction(LFn->getName())) Queue.push_back(std::make_pair(LFn, RFn)); @@ -698,10 +707,25 @@ void DifferenceEngine::diff(Module *L, Module *R) { for (Module::iterator I = R->begin(), E = R->end(); I != E; ++I) { Function *RFn = &*I; - if (!LNames.count(RFn->getName())) + StringRef Name = RFn->getName(); + if (Name.empty()) { + ++RightAnonCount; + continue; + } + + if (!LNames.count(Name)) logf("function %r exists only in right module") << RFn; } + + if (LeftAnonCount != 0 || RightAnonCount != 0) { + SmallString<32> Tmp; + Twine Message = "not comparing " + Twine(LeftAnonCount) + + " anonymous functions in the left module and " + Twine(RightAnonCount) + + " in the right module"; + logf(Message.toStringRef(Tmp)); + } + for (SmallVectorImpl<std::pair<Function*,Function*> >::iterator I = Queue.begin(), E = Queue.end(); I != E; ++I) diff(I->first, I->second); |