[clang] [llvm] [llvm][AArch64] Do not inline a function with different signing scheme. (PR #80642)

Nick Desaulniers via cfe-commits cfe-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 cfe-commits mailing list