summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2003-10-21 22:46:38 +0000
committerChris Lattner <sabre@nondot.org>2003-10-21 22:46:38 +0000
commitaeb18ce9c012f8554f48bae9bb32351c6eeaa26c (patch)
tree570c8db8d519fd784f9a2d7e65f12bd9c3c0acfd /lib
parent3d6a08d131a77cef94d59637705f1f0afe6e0483 (diff)
downloadllvm-aeb18ce9c012f8554f48bae9bb32351c6eeaa26c.tar.gz
llvm-aeb18ce9c012f8554f48bae9bb32351c6eeaa26c.tar.bz2
llvm-aeb18ce9c012f8554f48bae9bb32351c6eeaa26c.tar.xz
Fix bug: Linker/2003-10-21-ConflictingTypesTolerance.ll
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@9357 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r--lib/Linker/LinkModules.cpp23
-rw-r--r--lib/Transforms/Utils/Linker.cpp23
-rw-r--r--lib/VMCore/Linker.cpp23
3 files changed, 30 insertions, 39 deletions
diff --git a/lib/Linker/LinkModules.cpp b/lib/Linker/LinkModules.cpp
index 0e7d887044..1d002c5821 100644
--- a/lib/Linker/LinkModules.cpp
+++ b/lib/Linker/LinkModules.cpp
@@ -215,20 +215,17 @@ static bool LinkTypes(Module *Dest, const Module *Src, std::string *Err) {
}
// If we STILL cannot resolve the types, then there is something wrong.
- // Report the error.
+ // Report the warning and delete one of the names.
if (DelayedTypesToResolve.size() == OldSize) {
- // Build up an error message of all of the mismatched types.
- std::string ErrorMessage;
- for (unsigned i = 0, e = DelayedTypesToResolve.size(); i != e; ++i) {
- const std::string &Name = DelayedTypesToResolve[i];
- const Type *T1 = cast<Type>(VM.find(Name)->second);
- const Type *T2 = cast<Type>(DestST->lookup(Type::TypeTy, Name));
- ErrorMessage += " Type named '" + Name +
- "' conflicts.\n Src='" + T1->getDescription() +
- "'.\n Dest='" + T2->getDescription() + "'\n";
- }
- return Error(Err, "Type conflict between types in modules:\n" +
- ErrorMessage);
+ const std::string &Name = DelayedTypesToResolve.back();
+
+ const Type *T1 = cast<Type>(VM.find(Name)->second);
+ const Type *T2 = cast<Type>(DestST->lookup(Type::TypeTy, Name));
+ std::cerr << "WARNING: Type conflict between types named '" << Name
+ << "'.\n Src='" << *T1 << "'.\n Dest='" << *T2 << "'\n";
+
+ // Remove the symbol name from the destination.
+ DelayedTypesToResolve.pop_back();
}
}
}
diff --git a/lib/Transforms/Utils/Linker.cpp b/lib/Transforms/Utils/Linker.cpp
index 0e7d887044..1d002c5821 100644
--- a/lib/Transforms/Utils/Linker.cpp
+++ b/lib/Transforms/Utils/Linker.cpp
@@ -215,20 +215,17 @@ static bool LinkTypes(Module *Dest, const Module *Src, std::string *Err) {
}
// If we STILL cannot resolve the types, then there is something wrong.
- // Report the error.
+ // Report the warning and delete one of the names.
if (DelayedTypesToResolve.size() == OldSize) {
- // Build up an error message of all of the mismatched types.
- std::string ErrorMessage;
- for (unsigned i = 0, e = DelayedTypesToResolve.size(); i != e; ++i) {
- const std::string &Name = DelayedTypesToResolve[i];
- const Type *T1 = cast<Type>(VM.find(Name)->second);
- const Type *T2 = cast<Type>(DestST->lookup(Type::TypeTy, Name));
- ErrorMessage += " Type named '" + Name +
- "' conflicts.\n Src='" + T1->getDescription() +
- "'.\n Dest='" + T2->getDescription() + "'\n";
- }
- return Error(Err, "Type conflict between types in modules:\n" +
- ErrorMessage);
+ const std::string &Name = DelayedTypesToResolve.back();
+
+ const Type *T1 = cast<Type>(VM.find(Name)->second);
+ const Type *T2 = cast<Type>(DestST->lookup(Type::TypeTy, Name));
+ std::cerr << "WARNING: Type conflict between types named '" << Name
+ << "'.\n Src='" << *T1 << "'.\n Dest='" << *T2 << "'\n";
+
+ // Remove the symbol name from the destination.
+ DelayedTypesToResolve.pop_back();
}
}
}
diff --git a/lib/VMCore/Linker.cpp b/lib/VMCore/Linker.cpp
index 0e7d887044..1d002c5821 100644
--- a/lib/VMCore/Linker.cpp
+++ b/lib/VMCore/Linker.cpp
@@ -215,20 +215,17 @@ static bool LinkTypes(Module *Dest, const Module *Src, std::string *Err) {
}
// If we STILL cannot resolve the types, then there is something wrong.
- // Report the error.
+ // Report the warning and delete one of the names.
if (DelayedTypesToResolve.size() == OldSize) {
- // Build up an error message of all of the mismatched types.
- std::string ErrorMessage;
- for (unsigned i = 0, e = DelayedTypesToResolve.size(); i != e; ++i) {
- const std::string &Name = DelayedTypesToResolve[i];
- const Type *T1 = cast<Type>(VM.find(Name)->second);
- const Type *T2 = cast<Type>(DestST->lookup(Type::TypeTy, Name));
- ErrorMessage += " Type named '" + Name +
- "' conflicts.\n Src='" + T1->getDescription() +
- "'.\n Dest='" + T2->getDescription() + "'\n";
- }
- return Error(Err, "Type conflict between types in modules:\n" +
- ErrorMessage);
+ const std::string &Name = DelayedTypesToResolve.back();
+
+ const Type *T1 = cast<Type>(VM.find(Name)->second);
+ const Type *T2 = cast<Type>(DestST->lookup(Type::TypeTy, Name));
+ std::cerr << "WARNING: Type conflict between types named '" << Name
+ << "'.\n Src='" << *T1 << "'.\n Dest='" << *T2 << "'\n";
+
+ // Remove the symbol name from the destination.
+ DelayedTypesToResolve.pop_back();
}
}
}