[clang] [llvm] [llvm][AArch64] Do not inline a function with different signing scheme. (PR #80642)
Nick Desaulniers via llvm-commits
llvm-commits at lists.llvm.org
Tue Feb 13 09:48:23 PST 2024
================
@@ -2110,6 +2110,21 @@ llvm::InlineResult llvm::InlineFunction(CallBase &CB, InlineFunctionInfo &IFI,
return InlineResult::failure("incompatible strictfp attributes");
}
+ // Do not inline function with a different signing scheme.
+ if (CalledFunc->getFnAttribute("sign-return-address") !=
+ Caller->getFnAttribute("sign-return-address")) {
+ return InlineResult::failure("incompatible sign return address attributes");
+ }
+ if (CalledFunc->getFnAttribute("sign-return-address-key") !=
+ Caller->getFnAttribute("sign-return-address-key")) {
+ return InlineResult::failure("incompatible signing keys attributes");
+ }
+ if (CalledFunc->getFnAttribute("branch-protection-pauth-lr") !=
+ Caller->getFnAttribute("branch-protection-pauth-lr")) {
+ return InlineResult::failure(
+ "incompatible sign return address modifier attributes");
+ }
+
----------------
nickdesaulniers wrote:
I don't think we should be adding more explicit checks like this.
I think `CompatRule` in llvm/include/llvm/IR/Attributes.td should be used instead. The `StrictFP` check above could be converted to a `CompatRule` instead.
Can you please give that a shot?
These rules are checked earlier by `AttributeFuncs::areInlineCompatible` in InlineCost.cpp.
https://github.com/llvm/llvm-project/pull/80642
More information about the llvm-commits
mailing list