llvm-diff: Fix crash on anonymous functions

Not sure what the correct behavior is for this.
Skip them and report how many there were.

llvm-svn: 342857
This commit is contained in:
Matt Arsenault 2018-09-24 04:42:13 +00:00
parent 5bef27e808
commit ce5f203415
2 changed files with 34 additions and 2 deletions

View File

@ -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
}

View File

@ -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);