]> git.ipfire.org Git - thirdparty/gcc.git/commit - gcc/d/d-lang.cc
d: Compile-time reflection for supported built-ins (PR101127)
authorIain Buclaw <ibuclaw@gdcproject.org>
Sun, 25 Jul 2021 21:19:36 +0000 (23:19 +0200)
committerIain Buclaw <ibuclaw@gdcproject.org>
Wed, 28 Jul 2021 11:13:05 +0000 (13:13 +0200)
commitb2f6e1de242fff5713763cd3146dcf3f9dee51ca
treeb5e25559184ca505e2a59645a742ae9d8185b549
parent3e2136117487fa839f7601c3e22a2856978fb9d0
d: Compile-time reflection for supported built-ins (PR101127)

In order to allow user-code to determine whether a back-end builtin is
available without error, LANG_HOOKS_BUILTIN_FUNCTION_EXT_SCOPE has been
defined to delay putting back-end builtin functions until the ISA that
defines them has been declared.

However in D, there is no global namespace.  All builtins get pushed
into the `gcc.builtins' module, which is constructed during the semantic
analysis pass, which has already finished by the time target attributes
are evaluated.  So builtins are not pushed by the new langhook because
they would be ultimately ignored.  Builtins exposed to D code then can
now only be altered by the command-line.

PR d/101127

gcc/d/ChangeLog:

* d-builtins.cc (d_builtin_function_ext_scope): New function.
* d-lang.cc (LANG_HOOKS_BUILTIN_FUNCTION_EXT_SCOPE): Define.
* d-tree.h (d_builtin_function_ext_scope): Declare.

gcc/testsuite/ChangeLog:

* gdc.dg/pr101127a.d: New test.
* gdc.dg/pr101127b.d: New test.
gcc/d/d-builtins.cc
gcc/d/d-lang.cc
gcc/d/d-tree.h
gcc/testsuite/gdc.dg/pr101127a.d [new file with mode: 0644]
gcc/testsuite/gdc.dg/pr101127b.d [new file with mode: 0644]