[PATCH] D122608: Fix behavior of ifuncs with 'used' extern "C" static functions
Erich Keane via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Fri Apr 1 06:39:59 PDT 2022
erichkeane added inline comments.
================
Comment at: clang/lib/CodeGen/CodeGenModule.cpp:6390-6391
llvm::GlobalValue *Val = I.second;
- if (Val && !getModule().getNamedValue(Name->getName()))
+ llvm::GlobalValue *ExistingElem =
+ getModule().getNamedValue(Name->getName());
+
----------------
tahonermann wrote:
> I suggest moving the declaration of `ExistingElem` after the break on `!Val` given that the former is not relevant if `Val` is null.
>
> I think the `!Val` check is worth a comment here. I suggest:
> // If Val is null, that implies that there were multiple declarations that each
> // had a claim to the unmangled name. In this case, generation of the alias
> // is suppressed. See CodeGenModule::MaybeHandleStaticInExternC().
>
> The lack of checking for an existing element with the desired alias name was a pre-existing oversight, yes?
SGTM, thanks!
================
Comment at: clang/lib/CodeGen/CodeGenModule.cpp:6396-6397
+
+ // Simple case, where there are no ifuncs involved.
+ if (!ExistingElem || CheckAndReplaceExternCIFuncs(ExistingElem, Val))
addCompilerUsedGlobal(llvm::GlobalAlias::create(Name->getName(), Val));
----------------
tahonermann wrote:
> This comment seems inconsistent with the code. If there are no ifuncs involved, then why call `CheckAndReplaceExternCIFuncs()`?
Woops! Artifact of a previous implementation of this. Replaced the comment.
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D122608/new/
https://reviews.llvm.org/D122608
More information about the cfe-commits
mailing list