From c5e94699efa816444c0ae49ad55d0e01a48203df Mon Sep 17 00:00:00 2001 From: Iain Buclaw Date: Mon, 4 Jan 2021 19:05:38 +0100 Subject: 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. --- gcc/d/d-target.h | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'gcc/d/d-target.h') diff --git a/gcc/d/d-target.h b/gcc/d/d-target.h index 211f72f..56595d2 100644 --- a/gcc/d/d-target.h +++ b/gcc/d/d-target.h @@ -31,4 +31,19 @@ extern struct gcc_targetdm targetdm; /* Used by target to add predefined version idenditiers. */ extern void d_add_builtin_version (const char *); +/* Structure describing a supported key for `__traits(getTargetInfo)' and a + function to handle it. */ +struct d_target_info_spec +{ + /* The name of the key or NULL to mark the end of a table of keys. */ + const char *name; + /* Function to handle this key, the return value of the handler must be a CST. + This pointer may be NULL if no special handling is required, for instance, + the key must always be available according to the D language spec. */ + tree (*handler) (); +}; + +/* Used by target to add getTargetInfo handlers. */ +extern void d_add_target_info_handlers (const d_target_info_spec *); + #endif /* GCC_D_TARGET_H */ -- cgit v1.1