GV->setUnnamedAddr(UnnamedAddr);
if (GVal) {
- if (!GVal->getType()->isOpaque() && GVal->getValueType() != Ty)
+ if (GVal->getType() != Ty->getPointerTo(AddrSpace))
return error(
TyLoc,
"forward reference and definition of global have different types");
auto FRVI = ForwardRefVals.find(FunctionName);
if (FRVI != ForwardRefVals.end()) {
FwdFn = FRVI->second.first;
- if (!FwdFn->getType()->isOpaque()) {
- if (!FwdFn->getType()->getNonOpaquePointerElementType()->isFunctionTy())
- return error(FRVI->second.second, "invalid forward reference to "
- "function as global value!");
- if (FwdFn->getType() != PFT)
- return error(FRVI->second.second,
- "invalid forward reference to "
- "function '" +
- FunctionName +
- "' with wrong type: "
- "expected '" +
- getTypeString(PFT) + "' but was '" +
- getTypeString(FwdFn->getType()) + "'");
- }
+ if (!FwdFn->getType()->isOpaque() &&
+ !FwdFn->getType()->getNonOpaquePointerElementType()->isFunctionTy())
+ return error(FRVI->second.second, "invalid forward reference to "
+ "function as global value!");
+ if (FwdFn->getType() != PFT)
+ return error(FRVI->second.second,
+ "invalid forward reference to "
+ "function '" +
+ FunctionName +
+ "' with wrong type: "
+ "expected '" +
+ getTypeString(PFT) + "' but was '" +
+ getTypeString(FwdFn->getType()) + "'");
ForwardRefVals.erase(FRVI);
} else if ((Fn = M->getFunction(FunctionName))) {
// Reject redefinitions.
auto I = ForwardRefValIDs.find(NumberedVals.size());
if (I != ForwardRefValIDs.end()) {
FwdFn = I->second.first;
- if (!FwdFn->getType()->isOpaque() && FwdFn->getType() != PFT)
+ if (FwdFn->getType() != PFT)
return error(NameLoc, "type of definition and forward reference of '@" +
Twine(NumberedVals.size()) +
"' disagree: "