================ @@ -725,6 +725,19 @@ Function *Intrinsic::getOrInsertDeclaration(Module *M, ID id, // There can never be multiple globals with the same name of different types, // because intrinsics must be a specific type. auto *FT = getType(M->getContext(), id, Tys); + Function *F = cast<Function>( + M->getOrInsertFunction( + Tys.empty() ? getName(id) : getName(id, Tys, M, FT), FT) + .getCallee()); + if (F->getFunctionType() == FT) + return F; + + // It's possible that a declaration for this intrinsic already exists with an + // incorrect signature, if the signature has changed, but this particular + // declaration has not been auto-upgraded yet. In that case, rename the + // invalid declaration and insert a new one with the correct signature. The + // invalid declaration will get upgraded later. + F->setName(F->getName() + ".invalid"); ---------------- dtcxzyw wrote:
Which test corresponds to this change? We have renamed the old intrinsic to `name+old` in `upgradeIntrinsicFunction1`. Isn't it enough? Why didn't we need this in the last migration of memcpy/memset/memmove? https://github.com/llvm/llvm-project/pull/163802 _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
