[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/lib/Sema/SemaChecking.cpp b/clang/lib/Sema/SemaChecking.cpp
index fb66bc7..ddf58ab 100644
--- a/clang/lib/Sema/SemaChecking.cpp
+++ b/clang/lib/Sema/SemaChecking.cpp
@@ -191,22 +191,12 @@
return false;
}
-/// Check the number of arguments and arg type, and set the result type to
+/// Check the number of arguments and set the result type to
/// the argument type.
static bool SemaBuiltinPreserveAI(Sema &S, CallExpr *TheCall) {
if (checkArgCount(S, TheCall, 1))
return true;
- // The argument type must be a pointer
- ExprResult Arg = TheCall->getArg(0);
- QualType Ty = Arg.get()->getType();
- if (!Ty->isPointerType()) {
- S.Diag(Arg.get()->getBeginLoc(),
- diag::err_builtin_preserve_access_index_invalid_arg)
- << Ty << Arg.get()->getSourceRange();
- return true;
- }
-
TheCall->setType(TheCall->getArg(0)->getType());
return false;
}