[clang] [clang] Implement type/address discrimination of type_info vtable. (PR #99726)
Daniil Kovalev via cfe-commits
cfe-commits at lists.llvm.org
Sun Jul 21 16:53:54 PDT 2024
================
@@ -0,0 +1,87 @@
+// RUN: %clang_cc1 -DENABLE_TID=0 -I%S -std=c++11 -triple=arm64e-apple-darwin \
+// RUN: -fptrauth-calls -fptrauth-intrinsics \
+// RUN: -fptrauth-vtable-pointer-type-discrimination \
+// RUN: -fptrauth-vtable-pointer-address-discrimination \
+// RUN: %s -emit-llvm -o - | FileCheck %s --check-prefixes=CHECK,NODISC
+
+// RUN: %clang_cc1 -DENABLE_TID=1 -I%S -std=c++11 -triple=arm64e-apple-darwin \
+// RUN: -fptrauth-calls -fptrauth-intrinsics \
+// RUN: -fptrauth-vtable-pointer-type-discrimination \
+// RUN: -fptrauth-vtable-pointer-address-discrimination \
+// RUN: -fptrauth-type-info-vtable-pointer-discrimination \
+// RUN: %s -emit-llvm -o - | FileCheck %s --check-prefixes=CHECK,DISC
+
+// copied from typeinfo
+namespace std {
+
+#if __has_cpp_attribute(clang::ptrauth_vtable_pointer)
+# if __has_feature(ptrauth_type_info_vtable_pointer_discrimination)
+# define _LIBCPP_TYPE_INFO_VTABLE_POINTER_AUTH \
+ [[clang::ptrauth_vtable_pointer(process_independent, address_discrimination, type_discrimination)]]
+# else
+# define _LIBCPP_TYPE_INFO_VTABLE_POINTER_AUTH \
+ [[clang::ptrauth_vtable_pointer(process_independent, no_address_discrimination, no_extra_discrimination)]]
+# endif
+#else
+# define _LIBCPP_TYPE_INFO_VTABLE_POINTER_AUTH
+#endif
+
+ class _LIBCPP_TYPE_INFO_VTABLE_POINTER_AUTH type_info
+ {
+ type_info& operator=(const type_info&);
+ type_info(const type_info&);
+
+ protected:
+ explicit type_info(const char* __n);
+
+ public:
+ virtual ~type_info();
+
+ virtual void test_method();
+ };
+}
----------------
kovdan01 wrote:
```suggestion
} // namespace std
```
https://github.com/llvm/llvm-project/pull/99726
More information about the cfe-commits
mailing list