d: Merge upstream dmd a5c86f5b9
authorIain Buclaw <ibuclaw@gdcproject.org>
Mon, 4 Jan 2021 18:05:38 +0000 (19:05 +0100)
committerIain Buclaw <ibuclaw@gdcproject.org>
Tue, 5 Jan 2021 21:09:10 +0000 (22:09 +0100)
commitc5e94699efa816444c0ae49ad55d0e01a48203df
treef527fd1748c2f034d74ca1b268d4f56fc36cf050
parentae1ada95fee1ee4fac0dec0486076d9787988a03
d: Merge upstream dmd a5c86f5b9

Adds the following new `__traits' to the D language.

 - isDeprecated: used to detect if a function is deprecated.

 - isDisabled: used to detect if a function is marked with @disable.

 - isFuture: used to detect if a function is marked with @__future.

 - isModule: used to detect if a given symbol represents a module, this
   enhancement also adds support using `is(sym == module)'.

 - isPackage: used to detect if a given symbol represents a package,
   this enhancement also adds support using `is(sym == package)'.

 - child: takes two arguments.  The first must be a symbol or expression
   and the second must be a symbol, such as an alias to a member of the
   first 'parent' argument.  The result is the second 'member' argument
   interpreted with its 'this' context set to 'parent'.  This is the
   inverse of `__traits(parent, member)'.

 - isReturnOnStack: determines if a function's return value is placed on
   the stack, or is returned via registers.

 - isZeroInit: used to detect if a type's default initializer has no
   non-zero bits.

 - getTargetInfo: used to query features of the target being compiled
   for, the back-end can expand this to register any key to handle the
   given argument, however a reliable subset exists which includes
   "cppRuntimeLibrary", "cppStd", "floatAbi", and "objectFormat".

 - getLocation: returns a tuple whose entries correspond to the
   filename, line number, and column number of where the argument was
   declared.

 - hasPostblit: used to detect if a type is a struct with a postblit.

 - isCopyable: used to detect if a type allows copying its value.

 - getVisibility: an alias for the getProtection trait.

Reviewed-on: https://github.com/dlang/dmd/pull/12093

gcc/d/ChangeLog:

* dmd/MERGE: Merge upstream dmd a5c86f5b9.
* d-builtins.cc (d_eval_constant_expression): Handle ADDR_EXPR trees
created by build_string_literal.
* d-frontend.cc (retStyle): Remove function.
* d-target.cc (d_language_target_info): New variable.
(d_target_info_table): Likewise.
(Target::_init): Initialize d_target_info_table.
(Target::isReturnOnStack): New function.
(d_add_target_info_handlers): Likewise.
(d_handle_target_cpp_std): Likewise.
(d_handle_target_cpp_runtime_library): Likewise.
(Target::getTargetInfo): Likewise.
* d-target.h (struct d_target_info_spec): New type.
(d_add_target_info_handlers): Declare.
47 files changed:
gcc/d/d-builtins.cc
gcc/d/d-frontend.cc
gcc/d/d-target.cc
gcc/d/d-target.h
gcc/d/dmd/MERGE
gcc/d/dmd/declaration.h
gcc/d/dmd/dmodule.c
gcc/d/dmd/dstruct.c
gcc/d/dmd/dtemplate.c
gcc/d/dmd/expression.c
gcc/d/dmd/expressionsem.c
gcc/d/dmd/func.c
gcc/d/dmd/globals.h
gcc/d/dmd/idgen.c
gcc/d/dmd/module.h
gcc/d/dmd/mtype.c
gcc/d/dmd/parse.c
gcc/d/dmd/root/filename.c
gcc/d/dmd/root/filename.h
gcc/d/dmd/target.h
gcc/d/dmd/traits.c
gcc/testsuite/gdc.test/compilable/Test16206.d [new file with mode: 0644]
gcc/testsuite/gdc.test/compilable/imports/pkgmodule/package.d [new file with mode: 0644]
gcc/testsuite/gdc.test/compilable/imports/pkgmodule/plainmodule.d [new file with mode: 0644]
gcc/testsuite/gdc.test/compilable/imports/plainpackage/plainmodule.d [new file with mode: 0644]
gcc/testsuite/gdc.test/compilable/isZeroInit.d [new file with mode: 0644]
gcc/testsuite/gdc.test/compilable/isreturnonstack.d [new file with mode: 0644]
gcc/testsuite/gdc.test/compilable/line.d
gcc/testsuite/gdc.test/compilable/test16002.d [new file with mode: 0644]
gcc/testsuite/gdc.test/compilable/test17791.d [new file with mode: 0644]
gcc/testsuite/gdc.test/compilable/traits.d
gcc/testsuite/gdc.test/fail_compilation/fail16206a.d [new file with mode: 0644]
gcc/testsuite/gdc.test/fail_compilation/fail16206b.d [new file with mode: 0644]
gcc/testsuite/gdc.test/fail_compilation/fail_isZeroInit.d [new file with mode: 0644]
gcc/testsuite/gdc.test/fail_compilation/isreturnonstack.d [new file with mode: 0644]
gcc/testsuite/gdc.test/fail_compilation/test16002.d [new file with mode: 0644]
gcc/testsuite/gdc.test/fail_compilation/test17096.d [new file with mode: 0644]
gcc/testsuite/gdc.test/fail_compilation/trait_loc_err.d [new file with mode: 0644]
gcc/testsuite/gdc.test/fail_compilation/trait_loc_ov_err.d [new file with mode: 0644]
gcc/testsuite/gdc.test/fail_compilation/traits.d [new file with mode: 0644]
gcc/testsuite/gdc.test/fail_compilation/traits_child.d [new file with mode: 0644]
gcc/testsuite/gdc.test/runnable/imports/test18322import.d [new file with mode: 0644]
gcc/testsuite/gdc.test/runnable/test17373.d [new file with mode: 0644]
gcc/testsuite/gdc.test/runnable/test17878.d [new file with mode: 0644]
gcc/testsuite/gdc.test/runnable/test18322.d [new file with mode: 0644]
gcc/testsuite/gdc.test/runnable/traits.d
gcc/testsuite/gdc.test/runnable/traits_child.d [new file with mode: 0644]