================ @@ -622,6 +622,28 @@ static bool checkAliasedGlobal( return true; } +// Emit a warning if toc-data attribute is requested for global variables that +// have aliases and remove the toc-data attribute. +static void checkAliasForTocData(llvm::GlobalVariable *GVar, + const CodeGenOptions &CodeGenOpts, + DiagnosticsEngine &Diags, + SourceLocation Location) { + if (GVar->hasAttribute("toc-data")) { + auto GVId = GVar->getGlobalIdentifier(); ---------------- diggerlin wrote:
I have the same concern about it. The difference between `GVar->getGlobalIdentifier()` and `GVar->getName()` is as follows: `GlobalValue::getGlobalIdentifier()` returns `getParent()->getSourceFileName()` + `GV->getName()` when the `GlobalValue` has local linkage. Currently, we do not support local linkage, so `GlobalValue::getGlobalIdentifier()` has the same value as `GV->getName()`. If we were to support local linkage someday, for the `GlobalValue` with local linkage, we would use `getGlobalIdentifier()` (with the source file name) to search CodeGenOpts.TocDataVarsUserSpecified. However, in the function `AIXTargetCodeGenInfo::setTargetAttributes()`, it uses `auto GVId = M.getMangledName(dyn_cast<NamedDecl>(D))`; (without the source file name) to search `CodeGenOpts.TocDataVarsUserSpecified`. The question now is which value should be specified in the clang compile option `-mtocdata=`? (`getGlobalIdentifier()` or `getMangledName()`). It's clear that you cannot make both of the above two searches successful at the same time, regardless of which value you specify. https://github.com/llvm/llvm-project/pull/67999 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits