aboutsummaryrefslogtreecommitdiff
path: root/gcc/d/dmd
AgeCommit message (Collapse)AuthorFilesLines
2021-04-06d: Merge upstream dmd 5cc71ff83, druntime 1134b710Iain Buclaw5-57/+77
D front-end changes: - Fix ICEs that occurred when using opaque enums. - Update `pragma(printf)' checking code to work on 16-bit targets. Phobos change: - Don't compile in argTypes code on AArch64 Reviewed-on: https://github.com/dlang/dmd/pull/12378 https://github.com/dlang/druntime/pull/3431 gcc/d/ChangeLog: * dmd/MERGE: Merge upstream dmd 5cc71ff83. libphobos/ChangeLog: * libdruntime/MERGE: Merge upstream druntime 1134b710.
2021-04-04d: Merge upstream dmd 3b808e838, druntime 483bc129, phobos f89dc217aIain Buclaw44-2267/+4225
D front-end changes: - Explicit package visibility attribute is now always applied to introducing scopes. - Added `__traits(totype, string)' to convert mangled type string to an existing type. - Printf-like and scanf-like functions are now detected by prefixing them with `pragma(printf)' for printf-like functions or `pragma(scanf)' for scanf-like functions. - Added `__c_wchar_t', `__c_complex_float', `__c_complex_double', and `__c_complex_real' types for interfacing with C and C++. - Template alias parameters can now be instantiated with basic types, such as `int` or `void function()`. - Mixins can now be used as types in the form `mixin(string) var'. - Mixin expressions can take an argument list, same as `pragma(msg)'. - Implement DIP1034, add `typeof(*null)' types to represent `noreturn'. - `pragma(msg)' can print expressions of type `void'. - It is now an error to use private variables selectively imported from other modules. Due to a bug, some imported private members were visible from other modules, violating the specification. - Added new syntax to declare an alias to a function type using the `alias' syntax based on the assignment operator. - Function literals can now return a value by reference. Phobos changes: - Synchronize C bindings with the latest port fixes in upstream druntime. - Added alias for a `noreturn' type in object.d - Make use of the new `pragma(printf)' and `pragma(scanf)' pragmas, fix all code that got flagged as being incorrect. - Fixed code that relied on bugs in the D import package system. Reviewed-on: https://github.com/dlang/dmd/pull/12339 https://github.com/dlang/druntime/pull/3422 https://github.com/dlang/phobos/pull/7932 gcc/d/ChangeLog: * dmd/MERGE: Merge upstream dmd 3b808e838. * Make-lang.in (D_FRONTEND_OBJS): Add d/chkformat.o. * d-codegen.cc (build_struct_literal): Handle special enums. * d-convert.cc (convert_expr): Handle noreturn type. (convert_for_condition): Likewise. * d-target.cc (Target::_init): Set type for wchar_t. (TargetCPP::derivedClassOffset): New method. (Target::libraryObjectMonitors): New method. * decl.cc (get_symbol_decl): Set TREE_THIS_VOLATILE for functions of type noreturn. * toir.cc (IRVisitor::visit (ReturnStatement *)): Handle returning noreturn types. * types.cc (TypeVisitor::visit (TypeNoreturn *)): New method. (TypeVisitor::visit (TypeEnum *)): Handle special enums. libphobos/ChangeLog: * libdruntime/MERGE: Merge upstream druntime 483bc129. * libdruntime/Makefile.am (DRUNTIME_DSOURCES_DARWIN): Add core/sys/darwin/fcntl.d. (DRUNTIME_DSOURCES_OPENBSD): Add core/sys/openbsd/unistd.d. (DRUNTIME_DSOURCES_WINDOWS): Add core/sys/windows/stdc/malloc.d. * libdruntime/Makefile.in: Regenerate. * src/MERGE: Merge upstream phobos f89dc217a. * src/Makefile.am (PHOBOS_DSOURCES): Add std/regex/internal/tests2.d. * src/Makefile.in: Regenerate. * testsuite/libphobos.exceptions/chain.d: Fix format arguments. * testsuite/libphobos.exceptions/line_trace.d: Likewise.
2021-03-03d: Fix heap-buffer-overflow in checkModFileAlias [PR 99337]Iain Buclaw2-2/+2
The code wrongly assumed memcmp did not read past the mismatch. Reviewed-on: https://github.com/dlang/dmd/pull/12247 gcc/d/ChangeLog: PR d/99337 * dmd/MERGE: Merge upstream dmd a3c9bf422.
2021-02-13d: Merge upstream dmd 7132b3537Iain Buclaw135-9775/+9926
Splits out all semantic passes for Dsymbol, Type, and TemplateParameter nodes into Visitors in separate files, and the copyright years of all sources have been updated. Reviewed-on: https://github.com/dlang/dmd/pull/12190 gcc/d/ChangeLog: * dmd/MERGE: Merge upstream dmd 7132b3537. * Make-lang.in (D_FRONTEND_OBJS): Add d/dsymbolsem.o, d/semantic2.o, d/semantic3.o, and d/templateparamsem.o. * d-compiler.cc (Compiler::genCmain): Update calls to semantic entrypoint functions. * d-lang.cc (d_parse_file): Likewise. * typeinfo.cc (make_frontend_typeinfo): Likewise.
2021-02-04d: Merge upstream dmd 46133f761, druntime 0fd4364cIain Buclaw5-5/+95
D front-end changes: - Backported built-in function handling from upstream. - Added new intrinsic `byteswap(ushort)`. Druntime changes: - Update intrinsic modules core.bitop, core.checkedint, core.simd, core.vararg, and core.volatile. - Backport platform-specific fixes for runtime modules core.cpuid, core.internal.traits, and rt.lifetime. - Backport openbsd fixes for core.stdc.stdio. - Backport solaris fixes for core.sys.posix.locale, and core.thread.osthread (PR98910). gcc/d/ChangeLog: * dmd/MERGE: Merge upstream dmd 46133f761. * d-builtins.cc (d_build_builtins_module): Set builtins as BUILTINgcc. (maybe_set_builtin_1): Likewise. * d-frontend.cc (eval_builtin): Adjust condition for early return. * intrinsics.cc (maybe_set_intrinsic): Set intrinsics as BUILTINgcc. (maybe_expand_intrinsic): Add case for INTRINSIC_BSWAP16. * intrinsics.def (INTRINSIC_BT): Update signature. (INTRINSIC_BT64): Likewise. (INTRINSIC_BSWAP16): New intrinsic. (INTRINSIC_VLOAD8): Update module. (INTRINSIC_VLOAD16): Likewise. (INTRINSIC_VLOAD32): Likewise. (INTRINSIC_VLOAD64): Likewise. (INTRINSIC_VSTORE8): Likewise. (INTRINSIC_VSTORE16): Likewise. (INTRINSIC_VSTORE32): Likewise. (INTRINSIC_VSTORE64): Likewise. (INTRINSIC_ADDS): Update signature. (INTRINSIC_ADDSL): Likewise. (INTRINSIC_ADDU): Likewise. (INTRINSIC_ADDUL): Likewise. (INTRINSIC_SUBS): Likewise. (INTRINSIC_SUBSL): Likewise. (INTRINSIC_SUBU): Likewise. (INTRINSIC_SUBUL): Likewise. (INTRINSIC_MULS): Likewise. (INTRINSIC_MULSL): Likewise. (INTRINSIC_MULU): Likewise. (INTRINSIC_MULUI): Likewise. (INTRINSIC_MULUL): Likewise. (INTRINSIC_NEGS): Likewise. (INTRINSIC_NEGSL): Likewise. libphobos/ChangeLog: PR d/98910 * libdruntime/MERGE: Merge upstream druntime 0fd4364c. * libdruntime/Makefile.am (DRUNTIME_DSOURCES): Add core/volatile.d. * libdruntime/Makefile.in: Regenerate. * testsuite/libphobos.allocations/tls_gc_integration.d: Update test. gcc/testsuite/ChangeLog: * gdc.dg/intrinsics.d: Update test.
2021-02-02d: Fix junk in generated symbol on powerpc64-*-* [PR98921]Iain Buclaw4-10/+53
This adds a special formatter to OutBuffer to handle formatted printing of integers, a common case. The replacement is faster and safer. In dmangle.c, it also gets rid of a number of problematic casts, as seen on powerpc64 targets. Reviewed-on: https://github.com/dlang/dmd/pull/12174 gcc/d/ChangeLog: PR d/98921 * dmd/MERGE: Merge upstream dmd 5e2a81d9c.
2021-01-26d: Merge upstream dmd 609c3ce2d, phobos 3dd5df686Iain Buclaw7-8/+40
D front-end changes: - Contracts for pre- and postconditions are now implicitly "this" const, so that state can no longer be altered in these functions. - Inside a constructor scope, assigning to aggregate declaration members is done by considering the first assignment as initialization and subsequent assignments as modifications of the constructed object. For const/immutable fields the initialization is accepted in the constructor but subsequent modifications are not. However this rule did not apply when inside a constructor scope there is a call to a different constructor. This been changed so it is now an error when there's a double initialization of immutable fields inside a constructor. Phobos changes: - Don't run unit-tests for unsupported clocks in std.datetime. The phobos and phobos_shared tests now add -fversion=Linux_Pre_2639 if required. - Deprecate public extern(C) bindings for getline and getdelim in std.stdio. The correct module for bindings is core.sys.posix.stdio. Reviewed-on: https://github.com/dlang/dmd/pull/12153 https://github.com/dlang/phobos/pull/7768 gcc/d/ChangeLog: * dmd/MERGE: Merge upstream dmd 609c3ce2d. * d-compiler.cc (Compiler::loadModule): Rename to ... (Compiler::onParseModule): ... this. (Compiler::onImport): New function. * d-lang.cc (d_parse_file): Remove call to Compiler::loadModule. libphobos/ChangeLog: * src/MERGE: Merge upstream phobos 3dd5df686. * testsuite/libphobos.phobos/phobos.exp: Add compiler flag -fversion=Linux_Pre_2639 if target is linux_pre_2639. * testsuite/libphobos.phobos_shared/phobos_shared.exp: Likewise.
2021-01-21d: Enable private member access for __traitsIain Buclaw2-7/+5
The following traits can now access non-public members: - hasMember - getMember - getOverloads - getVirtualMethods - getVirtualFuntions This fixes a long-standing issue in D where the allMembers trait would correctly return non-public members but those non-public members would be inaccessible to other traits. Reviewed-on: https://github.com/dlang/dmd/pull/12135 gcc/d/ChangeLog: * dmd/MERGE: Merge upstream dmd 3a7ebef73.
2021-01-11d: Remove visibility and lookup deprecationIain Buclaw12-219/+61
The deprecation phase for access checks is finished. The `-ftransition=import` and `-ftransition=checkimports` switches no longer have an effect and are now removed. Symbols that are not visible in a particular scope will no longer be found by the compiler. Reviewed-on: https://github.com/dlang/dmd/pull/12124 gcc/d/ChangeLog: * dmd/MERGE: Merge upstream dmd 2d3d13748. * d-lang.cc (d_handle_option): Remove OPT_ftransition_checkimports and OPT_ftransition_import. * gdc.texi (Warnings): Remove documentation for -ftransition=import and -ftransition=checkimports. * lang.opt (ftransition=checkimports): Remove. (ftransition=import): Remove.
2021-01-09d: Synchronize testsuite with upstream dmdIain Buclaw1-1/+1
Adds TEST_OUTPUT directives and reduces the verbosity of many tests. Reviewed-on: https://github.com/dlang/dmd/pull/12112 gcc/d/ChangeLog: * dmd/MERGE: Merge upstream dmd cb1106ad5.
2021-01-09d: Support deprecated, @disable, and user-defined attributes on enum membersIain Buclaw13-59/+245
Reviewed-on: https://github.com/dlang/dmd/pull/12108 gcc/d/ChangeLog: * dmd/MERGE: Merge upstream dmd 9bba772fa.
2021-01-09d: Implement expression-based contract syntaxIain Buclaw8-91/+386
Expression-based contract syntax has been added. Contracts that consist of a single assertion can now be written more succinctly and multiple `in` or `out` contracts can be specified for the same function. Reviewed-on: https://github.com/dlang/dmd/pull/12106 gcc/d/ChangeLog: * dmd/MERGE: Merge upstream dmd e598f69c0.
2021-01-07d: Merge upstream dmd 9038e64c5.Iain Buclaw15-72/+216
Adds support for using user-defined attributes on function arguments and single-parameter alias declarations. These attributes behave analogous to existing UDAs. gcc/d/ChangeLog: * dmd/MERGE: Merge upstream dmd 9038e64c5. * d-builtins.cc (build_frontend_type): Update call to Parameter::create.
2021-01-05d: Merge upstream dmd a5c86f5b9Iain Buclaw17-331/+937
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.
2021-01-04Update copyright years.Jakub Jelinek1-1/+1
2020-12-31d: Mangled Symbols now back reference types and identifiersIain Buclaw3-166/+271
Symbols with extern(D) linkage are now mangled using back references to types and identifiers if these occur more than once in the mangled name as emitted before. This reduces symbol length, especially with chained expressions of templated functions with Voldemort return types. For example, the average symbol length of the 127000+ symbols created by a libphobos unittest build is reduced by a factor of about 3, while the longest symbol shrinks from 416133 to 1142 characters. Reviewed-on: https://github.com/dlang/dmd/pull/12079 gcc/d/ChangeLog: * dmd/MERGE: Merge upstream dmd 2bd4fc3fe.
2020-11-29d: Remove d_size_t from front-end sources (PR 87788)Iain Buclaw10-45/+31
The typedef for d_size_t assumes that the implementation of the front-end is written in D itself, where size_t can map only to uint32_t or uint64_t. As that is not the case for the current D front-end, the typedef should be removed. This would fix the bootstrap on targets where in C++ size_t is a long, such as darwin i386. Reviewed-on: https://github.com/dlang/dmd/pull/12008 gcc/d/ChangeLog: PR d/87788 * dmd/MERGE: Merge upsream dmd 45fa6cfd2.
2020-11-27d: Merge upstream dmd db0df3f7e.Iain Buclaw7-13/+2
Removes all support code and tests for the extern(Pascal) calling convention. Reviewed-on: https://github.com/dlang/dmd/pull/11994 gcc/d/ChangeLog: * dmd/MERGE: Merge upstream dmd db0df3f7e. * types.cc (TypeVisitor::visit (TypeFunction *)): Remove LINKpascal.
2020-11-18d: Fix a couple of ICEs found in the dmd front-end (PR97842)Iain Buclaw3-1/+11
- Segmentation fault on incomplete static if. - Segmentation fault resolving typeof() expression when gagging is on. Reviewed-on: https://github.com/dlang/dmd/pull/11971 gcc/d/ChangeLog: PR d/97842 * dmd/MERGE: Merge upstream dmd b6a779e49
2020-11-13d: Fix ICE in finish_thunk (PR97644)Iain Buclaw4-2/+23
Because this what the upstream reference compiler did, thunks for the D front-end were associated with the class definition, so were forced code-gen even if the target function was extern. This has now been changed so there are now only generated if there is a function definition, fixing the ICE that occurred in PR 97644, which was caused by calling expand_thunk() early. gcc/d/ChangeLog: PR d/97644 * dmd/MERGE: Merge upstream dmd 95044d8e4. * d-target.cc (TargetCPP::thunkMangle): New function. * decl.cc (finish_thunk): Don't force expand thunks for external functions. (make_thunk): Emit thunks only if the function has a definition. Generate correct mangling for thunks to C++ classes. gcc/testsuite/ChangeLog: * gdc.dg/pr92216.d: Update scan-assember.
2020-10-27d: Remove the d_critsec_size target hook.Iain Buclaw4-11/+9
The allocation of mutex objects for synchronized statements has been moved to the library as of merging druntime 58560d51. All support code in the compiler for getting the OS critical section size has been removed along with it. Reviewed-on: https://github.com/dlang/dmd/pull/11902 https://github.com/dlang/druntime/pull/3248 gcc/ChangeLog: * config/aarch64/aarch64-linux.h (GNU_USER_TARGET_D_CRITSEC_SIZE): Remove. * config/glibc-d.c (glibc_d_critsec_size): Likewise. (TARGET_D_CRITSEC_SIZE): Likewise. * config/i386/linux-common.h (GNU_USER_TARGET_D_CRITSEC_SIZE): Likewise. * config/sol2-d.c (solaris_d_critsec_size): Likewise. (TARGET_D_CRITSEC_SIZE): Likewise. * doc/tm.texi.in (TARGET_D_CRITSEC_SIZE): Likewise. * doc/tm.texi: Regenerate. gcc/d/ChangeLog: * dmd/MERGE: Merge upstream dmd bec5973b0. * d-target.cc (Target::critsecsize): Remove. * d-target.def: Remove d_critsec_size. libphobos/ChangeLog: * libdruntime/MERGE: Merge upstream druntime 58560d51.
2020-10-27d: Merge upstream dmd 0fcdaab32Iain Buclaw2-4/+64
Fixes a bug where there was undefined template references when compiling upstream dmd mainline. In `TemplateInstance::semantic`, there exists special handling of matching template instances for the same template declaration to ensure that only at most one instance gets codegen'd. If the primary instance `inst` originated from a non-root module, the `minst` field will be updated so it is now coming from a root module, however all Dsymbol `inst->members` of the instance still have their `_scope->minst` pointing at the original non-root module. We must now propagate `minst` to all members so that forward referenced dependencies that get instantiated will also be appended to the root module, otherwise there will be undefined references at link-time. This doesn't affect compilations where all modules are compiled together, as every module is a root module in that situation. What this primarily affects are cases where there is a mix of root and non-root modules, and a template was first instantiated in a non-root context, then later instantiated again in a root context. Reviewed-on: https://github.com/dlang/dmd/pull/11867 gcc/d/ChangeLog: * dmd/MERGE: Merge upstream dmd 0fcdaab32
2020-10-12d: Merge upstream dmd 70aabfb51Iain Buclaw2-1/+8
Fixes a symbol resolver bug where a private alias becomes public if used before its declaration. Reviewed-on: https://github.com/dlang/dmd/pull/11831 gcc/d/ChangeLog: * dmd/MERGE: Merge upstream dmd 70aabfb51
2020-10-12d: Merge upstream dmd 3a9790525Iain Buclaw2-5/+5
Fixes the return codes to match the documentation of Target::isVectorTypeSupported. Reviewed-on: https://github.com/dlang/dmd/pull/11830 gcc/d/ChangeLog: * dmd/MERGE: Merge upstream dmd 3a9790525 * d-target.cc (Target::isVectorTypeSupported): Adjust return codes for invalid size and invalid base type.
2020-08-26d: Merge upstream dmd e49192807Iain Buclaw3-53/+35
1. Removes prelude assert for constructors and destructors. To trigger these asserts one needed to construct or destruct an aggregate at the null memory location. This would crash upon any data member access, which is required for a constructor or destructor to do anything useful. 2. Disables bounds checking in foreach statements, when the array is either a static or dynamic array. If we trust the array `.length' to be correct, then all elements are between `[0 .. length]', and can't can't be out of bounds. Reviewed-on: https://github.com/dlang/dmd/pull/11623 gcc/d/ChangeLog: * dmd/MERGE: Merge upstream dmd e49192807
2020-08-26d: Fix no RVO when returning struct literals initialized with constructor.Iain Buclaw4-38/+50
Backports a change from upstream dmd that moves front-end NRVO checking from ReturnStatement semantic to the end of FuncDeclaration semantic. In the codegen, retStyle has been partially implemented so that only structs and static arrays return RETstack. This isn't accurate, but don't need to be for the purposes of semantic analysis. If a function either has TREE_ADDRESSABLE or must return in memory, then DECL_RESULT is set as the shidden field for the function. This is used in the codegen pass for ReturnStatement where it is now detected whether a function is returning a struct literal or a constructor function, then the DECL_RESULT is used to directly construct the return value, instead of doing so via temporaries. Reviewed-on: https://github.com/dlang/dmd/pull/11622 gcc/d/ChangeLog: PR d/96156 * d-frontend.cc (retStyle): Only return RETstack for struct and static array types. * decl.cc (DeclVisitor::visit (FuncDeclaration *)): Use NRVO return for all TREE_ADDRESSABLE types. Set shidden to the RESULT_DECL. * expr.cc (ExprVisitor::visit (CallExp *)): Force TARGET_EXPR if the 'this' pointer reference is a CONSTRUCTOR. (ExprVisitor::visit (StructLiteralExp *)): Generate assignment to the symbol to initialize with literal. * toir.cc (IRVisitor::visit (ReturnStatement *)): Detect returning struct literals and write directly into the RESULT_DECL. * dmd/MERGE: Merge upstream dmd fe5f388d8. gcc/testsuite/ChangeLog: PR d/96156 * gdc.dg/pr96156.d: New test.
2020-08-26d: Merge upstream dmd cb4a96faeIain Buclaw7-15/+32
Fixes both a bug where compilation would hang, and an issue where recursive template limits are hit too early. Reviewed-on: https://github.com/dlang/dmd/pull/11621 gcc/d/ChangeLog: * dmd/MERGE: Merge upstream dmd cb4a96fae
2020-08-26d: Use read() to load contents of stdin into memory.Iain Buclaw2-3/+4
This would be an improvement over reading one character at a time. An ICE was discovered when mixing reading from stdin with `-v', this has been fixed in upstream DMD and backported as well. Reviewed-on: https://github.com/dlang/dmd/pull/11620 gcc/d/ChangeLog: * d-lang.cc (d_parse_file): Use read() to load contents from stdin, allow the front-end to free the memory after parsing. * dmd/MERGE: Merge upstream dmd 2cc25c219.
2020-08-21d: Merge upstream dmd 1b5a53d01.Iain Buclaw3-11/+2
Fixes an ICE in setValue at dmd/dinterpret.c:7046 This was originally seen when running the testsuite for a 16-bit target, however, it could be reproduced on 32-bit using long[] as well. Reviewed-on: https://github.com/dlang/dmd/pull/11547 gcc/d/ChangeLog: * dmd/MERGE: Merge upstream dmd 1b5a53d01.
2020-08-03d: Merge upstream dmd c2274e56a (PR96250).Iain Buclaw4-3/+19
1. Fixes an ICE in the front-end if a struct symbol were to appear twice in the compilation unit. 2. Fixes a rejects-valid bug in the front-end where `(symbol)' was being resolved as a `var' expression, instead of `this.var'. Reviewed-on: https://github.com/dlang/dmd/pull/11436 https://github.com/dlang/dmd/pull/11439 gcc/d/ChangeLog: PR d/96250 * dmd/MERGE: Merge upstream dmd c2274e56a.
2020-06-28d: Merge upstream dmd 8508c4e68.Iain Buclaw2-14/+61
Fixes a performance bug where 'static foreach' would take an exponentially long time to expand during CTFE. In the following example: static foreach (i; 0..30000) {} Compilation time had been reduced from around 40 to 0.08 seconds. Memory consumption is also reduced from 3.5GB to 55MB. Reviewed-on: https://github.com/dlang/dmd/pull/11335 gcc/d/ChangeLog: * dmd/MERGE: Merge upstream dmd 8508c4e68.
2020-06-25d: Merge upstream dmd 4be011355.Iain Buclaw2-45/+55
Fixes self-assignment warnings seen when compiling with clang. Reviewed-on: https://github.com/dlang/dmd/pull/11315 gcc/d/ChangeLog: PR d/95075 * dmd/MERGE: Merge upstream dmd 4be011355.
2020-06-25d: Merge upstream dmd 90450f3ef.Iain Buclaw2-1/+2
Fixes a regression caused by an incomplete backport of converting the Expression semantic pass to a Visitor. Reviewed-on: https://github.com/dlang/dmd/pull/11314 gcc/d/ChangeLog: PR d/95250 * dmd/MERGE: Merge upstream dmd 90450f3ef. gcc/testsuite/ChangeLog: PR d/95250 * gdc.dg/pr95250.d: New test.
2020-06-25d: Merge upstream dmd 5fc1806cd.Iain Buclaw16-225/+222
Backports the OutBuffer interface from upstream dmd master, removing another difference this and the self-hosted D branch that is purely refactoring, and doesn't introduce any mechanical changes. Reviewed-on: https://github.com/dlang/dmd/pull/11302 gcc/d/ChangeLog: * dmd/MERGE: Merge upstream dmd 5fc1806cd. * d-lang.cc (d_parse_file): Use peekChars to get string representation of OutBuffer data.
2020-06-25d: Merge upstream dmd 4f1046222.Iain Buclaw13-25/+25
Renames OnScopeStatement to ScopeGuardStatement. Reviewed-on: https://github.com/dlang/dmd/pull/11285 gcc/d/ChangeLog: * dmd/MERGE: Merge upstream dmd 4f1046222. * toir.cc (IRVisitor::visit (OnScopeGuardStatement *)): Rename to ... (IRVisitor::visit (ScopeGuardStatement *)): ... this.
2020-06-09d: Merge upstream dmd 13d67c575.Iain Buclaw20-44/+826
Reviewed-on: https://github.com/dlang/dmd/pull/11224 gcc/d/ChangeLog: * dmd/MERGE: Merge upstream dmd 13d67c575. * d-builtins.cc (build_frontend_type): Update call to TypeVector::create. * d-frontend.cc (Global::_init): Move setting of errorLimit to ... * d-lang.cc (d_init_options): ... here. Update for new field location of errorLimit. (d_post_options): Likewise. * d-port.cc (Port::readwordLE): Update signature. (Port::readwordBE): Likewise. (Port::readlongLE): Likewise. (Port::readlongBE): Likewise. * decl.cc (get_symbol_decl): Update for new field types.
2020-06-08d: Fix regression caused by recent refactoringIain Buclaw2-2/+2
gcc/d/ChangeLog: PR d/95573 * dmd/MERGE: Merge upstream dmd 5041e56f1.
2020-06-08d: Merge upstream dmd 955b8b36f.Iain Buclaw11-252/+49
Merges AndAndExp and OrOrExp into a LogicalExp AST node. gcc/d/ChangeLog: * dmd/MERGE: Merge upstream dmd 955b8b36f. * expr.cc (ExprVisitor::visit (AndAndExp *)): Rename type to ... (ExprVisitor::visit (LogicalExp *)): ... this. Handle both 'and if' and 'or if' expression nodes. (ExprVisitor::visit (OrOrExp *)): Remove.
2020-06-08d: Merge upstream dmd 73d8e2fec.Iain Buclaw22-136/+135
Renames the enum PROTKIND to Prot::Kind, updates all uses of the original enum accordingly. gcc/d/ChangeLog: * dmd/MERGE: Merge upstream dmd 73d8e2fec. * decl.cc (get_symbol_decl): Use new Prot::Kind enum. * modules.cc (get_internal_fn): Likewise.
2020-06-07d: Merge upstream dmd 108ca1bcd.Iain Buclaw24-69/+69
Renames OutBuffer::peekString to OutBuffer::peekChars, and OutBuffer::extractString to OutBuffer::extractChars. All callers have been updated as appropriate. Reviewed-on: https://github.com/dlang/dmd/pull/11247 gcc/d/ChangeLog: * dmd/MERGE: Merge upstream dmd 108ca1bcd. * d-diagnostic.cc (expand_d_format): Adjust to use extractChars(). * d-frontend.cc (Loc::toChars): Likewise. * d-lang.cc (deps_write): Likewise. (d_parse_file): Likewise. * decl.cc (d_mangle_decl): Likewise. * intrinsics.cc (maybe_set_intrinsic): Likewise.
2020-06-07d: Merge upstream dmd b0df0e982Iain Buclaw30-304/+351
Adds a struct ParameterList to encapulate parameter and vararg information in the front-end. Reviewed-on: https://github.com/dlang/dmd/pull/11226 gcc/d/ChangeLog: * dmd/MERGE: Merge upstream dmd b0df0e982. * d-builtins.cc (build_frontend_type): Use VarArg for varargs_p. * d-codegen.cc (declaration_type): Call TypeFunction::create with argument VARARGnone. (parameter_type): Likewise. (d_build_call): Use new field names and member functions. * d-target.cc (Target::cppParameterType): Call TypeFunction::create with argument VARARGnone. * types.cc (TypeVisitor::visit (TypeFunction *): Use new field names and member functions.
2020-06-07d: Merge upstream dmd 1831b24ff.Iain Buclaw4-11/+11
Converts some global and param fields from pointers to value types. Reviewed-on: https://github.com/dlang/dmd/pull/11245 gcc/d/ChangeLog: * dmd/MERGE: Merge upstream dmd 1831b24ff. * d-lang.cc (d_init_options): Remove initialization of updated fields. (d_handle_option): Adjust for new field types.
2020-06-07d: Merge upstream dmd cef1e7991.Iain Buclaw9-48/+65
Adds a DString type, a struct that has a compatible layout with D strings. Many parameters in the Global struct have been switched over to this type, and users of these params have been adjust to use the length or ptr field as appropriate. gcc/d/ChangeLog: * dmd/MERGE: Merge upstream dmd cef1e7991. * d-lang.cc (d_parse_file): Adjust for new field types.
2020-06-05d: Merge upstream dmd 740f3d1ea.Iain Buclaw6-37/+28
Backports the conversion of the parameter fields debugids and versionids to Identifiers. The idea is that Identifiers should be used instead of C strings where ever possible. gcc/d/ChangeLog: * dmd/MERGE: Merge upstream dmd 740f3d1ea. * d-lang.cc (d_handle_option): Use new fields to save debug and version levels passed over command-line. (d_post_options): Add them to front-end here.
2020-06-05d: Merge upstream dmd f5638c7b8.Iain Buclaw5-24/+27
Adds a CHECKENABLE enum, uses it for all contract parameters for consistency in state checking. gcc/d/ChangeLog: * dmd/MERGE: Merge upstream dmd f5638c7b8. * d-builtins.cc (d_init_versions): Use new CHECKENABLE enum. * d-codegen.cc (array_bounds_check): Likewise. (build_frame_type): Likewise. (get_frameinfo): Likewise. * d-lang.cc (d_init_options): Likewise. (d_init_options_struct): Don't initialize x_flag_bounds_check. (d_handle_option): Use new CHECKENABLE enum. (d_post_options): Likewise. Set flag_bounds_check here. * expr.cc (ExprVisitor::visit(AssertExp *)): Use new CHECKENABLE enum.
2020-06-05d: Merge upstream dmd 56f0a65c4.Iain Buclaw17-165/+179
Updates the Target interface, removing static from all members, so all field accesses and member function calls go through a single global 'target'. Information relating to extern ABI are now in TargetC, TargetCPP, and TargetObjC for each supported language respectively. Reviewed-on: https://github.com/dlang/dmd/pull/11228 gcc/d/ChangeLog: * dmd/MERGE: Merge upstream dmd 56f0a65c4. * d-builtins.cc (build_frontend_type): Remove static. (d_build_builtins_module): Use target.va_listType() to get front-end type for va_list. (d_init_builtins): Move creation of va_list to Target::va_listType. * d-codegen.cc (build_interface_binfo): Use new target global. (build_vindex_ref): Likewise. (identity_compare_p): Likewise. * d-ctfloat.cc (CTFloat::parse): Likewise. * d-lang.cc (d_init): Likewise. * d-port.cc (Port::isFloat32LiteralOutOfRange): Likewise. (Port::isFloat64LiteralOutOfRange): Likewise. * d-target.cc (define_float_constants): Initialize constants through a reference, instead of setting globals. (Target::_init): Initialize new fields instead of setting globals. (Target::va_listType): Build front-end type from va_list_type_node. (Target::toCppMangle): Renamed to ... (TargetCPP::toMangle): ... this. (Target::cppTypeInfoMangle): Renamed to ... (TargetCPP::typeInfoMangle): ... this. (Target::cppTypeMangle): Renamed to ... (TargetCPP::typeMangle): this. (Target::cppParameterType): Renamed to ... (TargetCPP::parameterType): ... this. Use target.va_listType() to get front-end type for va_list. (Target::cppFundamentalType): Renamed to ... (TargetCPP::fundamentalType): ... this. * d-tree.h (build_frontend_type): Declare. * decl.cc (base_vtable_offset): Use new target global. * typeinfo.cc (layout_classinfo_interfaces): Likewise. (layout_cpp_typeinfo): Likewise. * types.cc (valist_array_p): Use target.va_listType() to get front-end type for va_list. (layout_aggregate_type): Use new target global.
2020-06-05d: Merge upstream dmd 6d5bffa54Iain Buclaw15-58/+49
Removes an unused parameter from Condition::include(), all callers have been updated in the front-end. Reviewed-on: https://github.com/dlang/dmd/pull/11229 gcc/d/ChangeLog: * dmd/MERGE: Merge upstream dmd 6d5bffa54. * d-builtins.cc (maybe_set_builtin_1): Update call to Condition::include(). * decl.cc (DeclVisitor::visit(AttribDeclaration *)): Likewise. * types.cc (layout_aggregate_members): Likewise.
2020-06-04d: Merge upstream dmd 48d704f08Iain Buclaw54-1312/+1338
Updates the Array interface in dmd/root/array.h to use a DArray<TYPE> internally. Splits out BitArray into a separate header. Reviewed-on: https://github.com/dlang/dmd/pull/11219 gcc/d/ChangeLog: * dmd/MERGE: Merge upstream dmd 48d704f08. * d-attribs.cc (build_attributes): Use new field name. * d-builtins.cc (build_frontend_type): Likewise. (maybe_set_builtin_1): Likewise. (d_maybe_set_builtin): Likewise. * d-codegen.cc (build_interface_binfo): Likewise. (identity_compare_p): Likewise. (lower_struct_comparison): Likewise. (build_struct_comparison): Likewise. (d_build_call): Likewise. (build_frame_type): Likewise. (build_closure): Likewise. * d-compiler.cc (Compiler::paintAsType): Likewise. (Compiler::loadModule): Likewise. * d-incpath.cc (add_globalpaths): Likewise. (add_filepaths): Likewise. (add_import_paths): Likewise. * d-lang.cc (deps_write): Likewise. (d_parse_file): Likewise. * decl.cc (gcc_attribute_p): Likewise. (base_vtable_offset): Likewise. (get_vtable_decl): Likewise. (build_class_instance): Likewise. * expr.cc (class ExprVisitor): Likewise. * modules.cc (layout_moduleinfo_fields): Likewise. (layout_moduleinfo): Likewise. (build_module_tree): Likewise. * toir.cc (class IRVisitor): Likewise. * typeinfo.cc (class TypeInfoVisitor): Likewise. (layout_classinfo_interfaces): Likewise. * types.cc (layout_aggregate_members): Likewise. (layout_aggregate_type): Likewise.
2020-06-04d: Merge upstream dmd 47ed0330fIain Buclaw128-128/+129
Updates the copyright years of the front-end sources. Reviewed-on: https://github.com/dlang/dmd/pull/11221 gcc/d/ChangeLog: * dmd/MERGE: Merge upstream dmd 47ed0330f.
2020-04-30d: Merge upstream dmd 934df6f8c, druntime 7bdd83d7Iain Buclaw1-1/+1
Corrects a previous change made to the SPARC stdc bindings, and backports PPC-related fixes. The library and language testsuite now passes fully on powerpc64le-linux-gnu. Fixes: PR d/90719 Fixes: PR d/94825 Reviewed-on: https://github.com/dlang/dmd/pull/11079 https://github.com/dlang/druntime/pull/3078 https://github.com/dlang/druntime/pull/3083 libphobos/ChangeLog: PR d/94825 * libdruntime/Makefile.am (DRUNTIME_SOURCES_CONFIGURED): Remove config/powerpc/switchcontext.S * libdruntime/Makefile.in: Regenerate. * libdruntime/config/powerpc/callwithstack.S: Remove. * libdruntime/config/powerpc/switchcontext.S: Fix symbol name of fiber_switchContext. * libdruntime/core/thread.d: Disable fiber migration tests on PPC. * testsuite/libphobos.thread/fiber_guard_page.d: Set guardPageSize same as stackSize.