AaronBallman wrote: > Thanks for the comments @AaronBallman. The core issue here is that the > current builtin handling design does not allow multiple overloads for the > same identifier to coexist (ref. > > https://github.com/llvm/llvm-project/blob/eacda36c7dd842cb15c0c954eda74b67d0c73814/clang/include/clang/Basic/Builtins.h#L66 > ), unless the builtins are defined in target specific namespaces which is > what I tried in my original patch . If we want change this approach, I > currently think of couple of ways at a top level > > 1. As you said, we could have OCL specific LibBuiltin and LangBuiltin > TableGen classes (and corresponding macros in Buitlins.inc). To make this > work they would need new builtin ID's of different form (say > "BI_OCL##identifier"). This is very Language specific. > > 2. Probably change the current Builtin Info structure to allow vector of > possible signatures for an identifier. The builtin type decoder could choose > the appropriate signature based on LangOpt. (This wording is vague and could > be a separate discussion in itself ) > > > either way, changes in current design are required. printf is the only > current use case I know that can benefit out of this (since OpenCL v1.2 > s6.9.f says other library functions defined in C standard header are not > available ,so 🤷♂️ ). But I guess we could have more use cases in future. can > this be a separate discussion ? This patch would unblock my current work for > now.
I looked at the OpenCL spec for C standard library support and was surprised that 1) it's only talking about C99 so it's unclear what happens for C11 (clause 6 says "This document describes the modifications and restrictions to C99 and C11 in OpenCL C" but 6.11 only talks about C99 headers and leaves `iso646.h`, `math.h`, `stdbool.h`, `stddef.h`, (all in C99) as well as `stdalign.h`, `stdatomic.h`, `stdnoreturn.h`, `threads.h`, and `uchar.h` available?), and 2) OpenCL's `printf` is not really the same function as C's `printf` (https://registry.khronos.org/OpenCL/specs/3.0-unified/html/OpenCL_C.html#differences-between-opencl-c-and-c99-printf). #1 is probably more of an oversight than anything, at least with the C11 headers. So maybe this isn't a super slippery slope, but maybe C23 will change that (I can imagine `stdbit.h` being of use in OpenCL for bit-bashing operations). However, the fact that the builtin isn't really `printf` but is `printf`-like makes me think we should make it a separate builtin to avoid surprises (we do diagnostics based on builtin IDs and we have special checking logic that we perhaps should be exempting in some cases). https://github.com/llvm/llvm-project/pull/86801 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits