[clang] [analyzer] Confidently inline final methods (PR #224070)
Benedek Kaibas via cfe-commits
cfe-commits at lists.llvm.org
Wed Sep 16 12:10:00 PDT 2026
=?utf-8?q?Donát?= Nagy <donat.nagy at ericsson.com>,
=?utf-8?q?Donát?= Nagy <donat.nagy at ericsson.com>,
=?utf-8?q?Donát?= Nagy <donat.nagy at ericsson.com>,
=?utf-8?q?Donát?= Nagy <donat.nagy at ericsson.com>
Message-ID:
In-Reply-To: <llvm.org/llvm/llvm-project/pull/224070 at github.com>
================
@@ -798,10 +798,18 @@ RuntimeDefinition CXXInstanceCall::getRuntimeDefinition() const {
if (!MD->isVirtual())
return AnyFunctionCall::getRuntimeDefinition();
+ // If the method is final or declared in a final class, we can inline it.
+ if (MD->hasAttr<FinalAttr>() || MD->getParent()->hasAttr<FinalAttr>())
+ return AnyFunctionCall::getRuntimeDefinition();
+
auto [RD, CanBeSubClass] = getDeclForDynamicType();
if (!RD || !RD->hasDefinition())
return {};
+ // We can confidently inline a method called on an object with final type.
+ if (RD->hasAttr<FinalAttr>())
+ CanBeSubClass = false;
----------------
benedekaibas wrote:
I think this is correct.
https://github.com/llvm/llvm-project/pull/224070
More information about the cfe-commits
mailing list