- if (!isa<ArrayType>(GV->getType()->getElementType())) {
- Concrete = 0;
- break; // Non array's cannot be compatible with other types.
- } else if (Concrete == 0) {
- Concrete = GV;
- } else {
- // Must have different types... allow merging A[0][4] w/ A[6][4] if
- // A[0][4] is external.
- const ArrayType *NAT = cast<ArrayType>(GV->getType()->getElementType());
- const ArrayType *CAT =
- cast<ArrayType>(Concrete->getType()->getElementType());
-
- if (NAT->getElementType() != CAT->getElementType()) {
- Concrete = 0; // Non-compatible types
- break;
- } else if (NAT->getNumElements() == 0 && GV->isExternal()) {
- // Concrete remains the same
- } else if (CAT->getNumElements() == 0 && Concrete->isExternal()) {
- Concrete = GV; // Concrete becomes GV
- } else {
- Concrete = 0; // Cannot merge these types...
- break;
+ if (!GV->isExternal()) {
+ if (Concrete) {
+ std::cerr << "WARNING: Two global variables with external linkage"
+ << " exist with the same name: '" << GV->getName()
+ << "'!\n";
+ return false;