================
@@ -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

Reply via email to