[CLANG][BPF] permit any argument type for __builtin_preserve_access_index()
Commit c15aa241f821 ("[CLANG][BPF] change __builtin_preserve_access_index()
signature") changed the builtin function signature to
PointerT __builtin_preserve_access_index(PointerT ptr)
with a pointer type as the argument/return type, where argument and
return types must be the same.
There is really no reason for this constraint. The builtin just
presented a code region so that IR builtins
__builtin_{array, struct, union}_preserve_access_index
can be applied.
This patch removed the pointer type restriction to permit any
argument type as long as it is permitted by the compiler.
Differential Revision: https://reviews.llvm.org/D67883
llvm-svn: 372516
diff --git a/clang/docs/LanguageExtensions.rst b/clang/docs/LanguageExtensions.rst
index 9826c41..23c8778 100644
--- a/clang/docs/LanguageExtensions.rst
+++ b/clang/docs/LanguageExtensions.rst
@@ -2354,13 +2354,13 @@
under bpf compile-once run-everywhere framework. Debuginfo (typically
with ``-g``) is needed, otherwise, the compiler will exit with an error.
The return type for the intrinsic is the same as the type of the
-argument, and must be a pointer type.
+argument.
**Syntax**:
.. code-block:: c
- PointerT __builtin_preserve_access_index(PointerT ptr)
+ type __builtin_preserve_access_index(type arg)
**Example of Use**:
@@ -2375,7 +2375,8 @@
} c[4];
};
struct t *v = ...;
- const void *pb =__builtin_preserve_access_index(&v->c[3].b);
+ int *pb =__builtin_preserve_access_index(&v->c[3].b);
+ __builtin_preserve_access_index(v->j);
Multiprecision Arithmetic Builtins
----------------------------------