diff options
author | Iain Buclaw <ibuclaw@gdcproject.org> | 2022-05-16 18:30:46 +0200 |
---|---|---|
committer | Iain Buclaw <ibuclaw@gdcproject.org> | 2022-05-16 19:07:45 +0200 |
commit | 5eb9927aae076200bb7ba3f22c33b0a7c97c5643 (patch) | |
tree | f80210439a5d8995ebf189bce7f2e141fcb1caec /gcc/d/d-lang.cc | |
parent | 682e587f1021241758f7dfe0b22651008622a312 (diff) | |
download | gcc-5eb9927aae076200bb7ba3f22c33b0a7c97c5643.zip gcc-5eb9927aae076200bb7ba3f22c33b0a7c97c5643.tar.gz gcc-5eb9927aae076200bb7ba3f22c33b0a7c97c5643.tar.bz2 |
d: Merge upstream dmd 60bfa0ee7, druntime 94bd5bcb, phobos 3a1cd9a01.
D front-end changes:
- Import dmd v2.100.0.
- Add bit fields to D, enabled via the -fpreview=bitfields switch.
- Removed the -ftransition=markdown and -frevert=markdown switches.
- Added new trait `__traits(classInstanceAlignment)' to provide the
required data alignment for classes.
- The check for `pragma(crt_constructor)' and `pragma(crt_destructor)'
linkage has been relaxed to allow all `void()' signatures.
- ImportC parser now recognizes the `typeof(...)' operator.
D runtime changes:
- Import druntime v2.100.0.
Phobos changes:
- Import phobos v2.100.0.
- To comply with dip1000, `std.socket.Socket` methods now accept only
`scope' arrays.
- The `fill', `alignSize', `align2', and `align4' methods of
`std.outbuffer.OutBuffer' have been extended to allow specifying a custom
value when pre-filling or padding the buffer.
gcc/d/ChangeLog:
* dmd/MERGE: Merge upstream dmd 60bfa0ee7.
* dmd/VERSION: Update version to v2.100.0.
* d-builtins.cc (d_init_versions): Update for new front-end interface.
* d-codegen.cc (d_decl_context): Use resolvedLinkage to get
declaration linkage.
(build_struct_literal): Track offset in bits.
* d-gimplify.cc (d_gimplify_modify_expr): Check both operands for a
bit-field reference.
* d-lang.cc (d_handle_option): Handle -fpreview=bitfields, remove
-frevert=markdown and -ftransition=vmarkdown.
(d_post_options): Set flag_rtti and flag_exceptions if -fno-druntime
was seen on command-line.
(d_parse_file): Update for new front-end interface.
(d_type_promotes_to): Use resolvedLinkage to get declaration linkage.
* decl.cc (make_thunk): Likewise.
* expr.cc (ExprVisitor::visit (CatAssignExp *)): Remove lowering for
appending of an element or array to another array.
* lang.opt (fpreview=bitfields): New option.
(frevert=markdown): Remove.
(ftransition=vmarkdown): Remove.
* types.cc (layout_aggregate_members): Ignore anonymous fields in
total count.
libphobos/ChangeLog:
* libdruntime/MERGE: Merge upstream druntime 94bd5bcb.
* libdruntime/Makefile.am (ALL_DRUNTIME_INSTALL_DSOURCES): Add
$(DRUNTIME_DSOURCES_ELF).
(ALL_DRUNTIME_SOURCES): Likewise.
(DRUNTIME_DSOURCES_ELF): New variable.
* libdruntime/Makefile.in: Regenerate.
* src/MERGE: Merge upstream phobos 3a1cd9a01.
* testsuite/libphobos.init_fini/custom_gc.d: Update test.
Diffstat (limited to 'gcc/d/d-lang.cc')
-rw-r--r-- | gcc/d/d-lang.cc | 104 |
1 files changed, 52 insertions, 52 deletions
diff --git a/gcc/d/d-lang.cc b/gcc/d/d-lang.cc index 9adcabd..d1f4959 100644 --- a/gcc/d/d-lang.cc +++ b/gcc/d/d-lang.cc @@ -478,21 +478,21 @@ d_handle_option (size_t scode, const char *arg, HOST_WIDE_INT value, break; case OPT_fdoc: - global.params.doDocComments = value; + global.params.ddoc.doOutput = value; break; case OPT_fdoc_dir_: - global.params.doDocComments = true; - global.params.docdir = arg; + global.params.ddoc.doOutput = true; + global.params.ddoc.dir = arg; break; case OPT_fdoc_file_: - global.params.doDocComments = true; - global.params.docname = arg; + global.params.ddoc.doOutput = true; + global.params.ddoc.name = arg; break; case OPT_fdoc_inc_: - global.params.ddocfiles.push (arg); + global.params.ddoc.files.push (arg); break; case OPT_fdruntime: @@ -500,13 +500,12 @@ d_handle_option (size_t scode, const char *arg, HOST_WIDE_INT value, break; case OPT_fdump_c___spec_: - if (global.params.doCxxHdrGeneration == CxxHeaderMode::none) - global.params.doCxxHdrGeneration = CxxHeaderMode::silent; - global.params.cxxhdrname = arg; + global.params.cxxhdr.doOutput = true; + global.params.cxxhdr.name = arg; break; case OPT_fdump_c___spec_verbose: - global.params.doCxxHdrGeneration = CxxHeaderMode::verbose; + global.params.cxxhdr.fullOutput = true; break; case OPT_fdump_d_original: @@ -572,18 +571,22 @@ d_handle_option (size_t scode, const char *arg, HOST_WIDE_INT value, global.params.useDIP25 = FeatureState::enabled; global.params.useDIP1000 = FeatureState::enabled; global.params.useDIP1021 = value; + global.params.bitfields = value; global.params.dtorFields = FeatureState::enabled; global.params.fieldwise = value; global.params.fixAliasThis = value; global.params.previewIn = value; global.params.fix16997 = value; - global.params.markdown = value; global.params.noSharedAccess = value; global.params.rvalueRefParam = FeatureState::enabled; global.params.inclusiveInContracts = value; global.params.shortenedMethods = value; break; + case OPT_fpreview_bitfields: + global.params.bitfields = value; + break; + case OPT_fpreview_dip1000: global.params.useDIP1000 = FeatureState::enabled; break; @@ -641,7 +644,6 @@ d_handle_option (size_t scode, const char *arg, HOST_WIDE_INT value, global.params.useDIP25 = FeatureState::disabled; global.params.dtorFields = FeatureState::disabled; global.params.fix16997 = !value; - global.params.markdown = !value; break; case OPT_frevert_dip1000: @@ -660,17 +662,14 @@ d_handle_option (size_t scode, const char *arg, HOST_WIDE_INT value, global.params.fix16997 = !value; break; - case OPT_frevert_markdown: - global.params.markdown = !value; - break; - case OPT_frtti: global.params.useTypeInfo = value; break; case OPT_fsave_mixins_: - global.params.mixinFile = arg; - global.params.mixinOut = d_gc_malloc<OutBuffer> (); + global.params.mixinOut.doOutput = true; + global.params.mixinOut.name = arg; + global.params.mixinOut.buffer = d_gc_malloc<OutBuffer> (); break; case OPT_fswitch_errors: @@ -681,7 +680,6 @@ d_handle_option (size_t scode, const char *arg, HOST_WIDE_INT value, global.params.vfield = value; global.params.vgc = value; global.params.vin = value; - global.params.vmarkdown= value; global.params.vtls = value; break; @@ -697,10 +695,6 @@ d_handle_option (size_t scode, const char *arg, HOST_WIDE_INT value, global.params.vgc = value; break; - case OPT_ftransition_vmarkdown: - global.params.vmarkdown = value; - break; - case OPT_ftransition_templates: global.params.vtemplates = value; break; @@ -736,17 +730,17 @@ d_handle_option (size_t scode, const char *arg, HOST_WIDE_INT value, break; case OPT_H: - global.params.doHdrGeneration = true; + global.params.dihdr.doOutput = true; break; case OPT_Hd: - global.params.doHdrGeneration = true; - global.params.hdrdir = arg; + global.params.dihdr.doOutput = true; + global.params.dihdr.dir = arg; break; case OPT_Hf: - global.params.doHdrGeneration = true; - global.params.hdrname = arg; + global.params.dihdr.doOutput = true; + global.params.dihdr.name = arg; break; case OPT_imultilib: @@ -827,11 +821,11 @@ d_handle_option (size_t scode, const char *arg, HOST_WIDE_INT value, break; case OPT_Xf: - global.params.jsonfilename = arg; + global.params.json.name = arg; /* Fall through. */ case OPT_X: - global.params.doJsonGeneration = true; + global.params.json.doOutput = true; break; default: @@ -904,16 +898,26 @@ d_post_options (const char ** fn) ? CHECKENABLEoff : CHECKENABLEon; } + /* When not linking against D runtime, turn off all code generation that + would otherwise reference it. */ if (global.params.betterC) { if (!OPTION_SET_P (flag_moduleinfo)) global.params.useModuleInfo = false; + /* Ensure that the front-end options are in sync with the `-frtti' and + `-fexceptions' flags. */ if (!OPTION_SET_P (flag_rtti)) - global.params.useTypeInfo = false; + { + global.params.useTypeInfo = false; + flag_rtti = false; + } if (!OPTION_SET_P (flag_exceptions)) - global.params.useExceptions = false; + { + global.params.useExceptions = false; + flag_exceptions = false; + } global.params.checkAction = CHECKACTION_C; } @@ -947,19 +951,15 @@ d_post_options (const char ** fn) if (flag_excess_precision == EXCESS_PRECISION_DEFAULT) flag_excess_precision = EXCESS_PRECISION_STANDARD; - global.params.symdebug = write_symbols != NO_DEBUG; global.params.useInline = flag_inline_functions; global.params.showColumns = flag_show_column; global.params.printErrorContext = flag_diagnostics_show_caret; if (global.params.useInline) - global.params.hdrStripPlainFunctions = false; + global.params.dihdr.fullOutput = true; global.params.obj = !flag_syntax_only; - /* Has no effect yet. */ - global.params.pic = flag_pic != 0; - /* Add in versions given on the command line. */ if (global.params.versionids) { @@ -1068,8 +1068,8 @@ d_parse_file (void) /* Handling stdin, generate a unique name for the module. */ Module *m = Module::create (in_fnames[i], Identifier::idPool ("__stdin"), - global.params.doDocComments, - global.params.doHdrGeneration); + global.params.ddoc.doOutput, + global.params.dihdr.doOutput); modules.push (m); /* Overwrite the source file for the module, the one created by @@ -1084,8 +1084,8 @@ d_parse_file (void) const char *name = FileName::removeExt (basename); Module *m = Module::create (in_fnames[i], Identifier::idPool (name), - global.params.doDocComments, - global.params.doHdrGeneration); + global.params.ddoc.doOutput, + global.params.dihdr.doOutput); modules.push (m); FileName::free (name); } @@ -1142,7 +1142,7 @@ d_parse_file (void) if (global.errors) goto had_errors; - if (global.params.doHdrGeneration) + if (global.params.dihdr.doOutput) { /* Generate 'header' import files. Since 'header' import files must be independent of command line switches and what else is imported, they @@ -1316,12 +1316,12 @@ d_parse_file (void) printTemplateStats (); /* Generate JSON files. */ - if (global.params.doJsonGeneration) + if (global.params.json.doOutput) { OutBuffer buf; json_generate (&buf, &modules); - const char *name = global.params.jsonfilename.ptr; + const char *name = global.params.json.name.ptr; FILE *json_stream; if (name && (name[0] != '-' || name[1] != '\0')) @@ -1346,7 +1346,7 @@ d_parse_file (void) } /* Generate Ddoc files. */ - if (global.params.doDocComments && !global.errors && !errorcount) + if (global.params.ddoc.doOutput && !global.errors && !errorcount) { for (size_t i = 0; i < modules.length; i++) { @@ -1370,7 +1370,7 @@ d_parse_file (void) } /* Generate C++ header files. */ - if (global.params.doCxxHdrGeneration != CxxHeaderMode::none) + if (global.params.cxxhdr.doOutput) genCppHdrFiles (modules); if (global.errors) @@ -1403,23 +1403,23 @@ d_parse_file (void) errorcount += (global.errors + global.warnings); /* We want to write the mixin expansion file also on error. */ - if (global.params.mixinOut) + if (global.params.mixinOut.doOutput) { - FILE *mixin_stream = fopen (global.params.mixinFile, "w"); + FILE *mixin_stream = fopen (global.params.mixinOut.name.ptr, "w"); if (mixin_stream) { - OutBuffer *buf = global.params.mixinOut; + OutBuffer *buf = global.params.mixinOut.buffer; fprintf (mixin_stream, "%s", buf->peekChars ()); if (ferror (mixin_stream) || fclose (mixin_stream)) fatal_error (input_location, "closing mixin file %s: %m", - global.params.mixinFile); + global.params.mixinOut.name.ptr); } else { fatal_error (input_location, "opening mixin file %s: %m", - global.params.mixinFile); + global.params.mixinOut.name.ptr); } } @@ -1558,7 +1558,7 @@ d_type_promotes_to (tree type) /* Promotions are only applied on unnamed function arguments for declarations with `extern(C)' or `extern(C++)' linkage. */ if (cfun && DECL_LANG_FRONTEND (cfun->decl) - && DECL_LANG_FRONTEND (cfun->decl)->linkage != LINK::d) + && DECL_LANG_FRONTEND (cfun->decl)->resolvedLinkage () != LINK::d) { /* In [type/integer-promotions], integer promotions are conversions of the following types: |