davemgreen wrote:

> The issue seems to be with pointers to functions, adding
> 
> ```
>            FDTy = getContext().getBaseElementType(FDTy);
>          return (FDTy->isPointerOrReferenceType() &&
>                  getContext().getTypeSize(FDTy) == 64 &&
> -                !FDTy->getPointeeType().hasAddressSpace()) ||
> +                !FDTy->getPointeeType().hasAddressSpace() &&
> +                !FDTy->getPointeeType()->isFunctionType()) ||
>                 Self(Self, FDTy);
>        });
>      };
> ```
> 
> to clang/lib/CodeGen/Targets/AArch64.cpp:512 makes the tests pass.
> 
> The problematic type in our case seems to be 
> [abseil::FunctionRef](https://github.com/abseil/abseil-cpp/blob/master/absl/functional/function_ref.h#L85)
> 
> Please let me know if this is sufficient, reducing internal test to a 
> standalone reproducer might take some time.

Hi - that might break some of my motivating examples (they were pointers passed 
in structs from lambda captures, I don't remember if the pointers were to 
functions or not, there were definitely a lot of function pointers flying 
around). In general I would have expected it to be better to avoid the 
ptrtoint->inttoptr when passed through a function argument though. Can we make 
it bail out for hwasan only with function pointers?

I was trying with code like https://godbolt.org/z/xfW3vcjeo to see if I could 
hit the same issue (but imagine running on an AArch64 machine). Any ideas what 
it might take to trigger it (different option, certain code pattern?)

https://github.com/llvm/llvm-project/pull/135064
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to