================
@@ -0,0 +1,190 @@
+// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -emit-llvm -fsanitize=kcfi
-o - %s | FileCheck %s
+// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -emit-llvm -fsanitize=kcfi
-x c++ -o - %s | FileCheck %s --check-prefixes=CHECK,MEMBER
+// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -emit-llvm -fsanitize=kcfi
-fpatchable-function-entry-offset=3 -o - %s | FileCheck %s
--check-prefixes=CHECK,OFFSET
+
+// Note that the interleving of functions, which normally would be in sequence,
+// is due to the fact that Clang outputs them in a non-sequential order.
+
+#if !__has_feature(kcfi)
----------------
bwendling wrote:
> ```
> typedef int (*foo)(void);
> typedef int (*foo)(void) __attribute__((kcfi_salt("pepper"))); // Should this
> be allowed on a redeclaration?
> typedef int (*foo)(void) __attribute__((kcfi_salt("spice"))); // Should be
> rejected, right?
> ```
These are rejected, even if the first one is removed. If the salt strings are
the same, then it's accepted. I believe that's the correct behavior. I'll add
tests for it.
https://github.com/llvm/llvm-project/pull/141846
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits