August 30, 2015
  Branch: refs/heads/stable
  Home:   https://github.com/D-Programming-Language/dmd
  Commit: 6c14fadca403a61a578795ec0fb71f9340c7b543
      https://github.com/D-Programming-Language/dmd/commit/6c14fadca403a61a578795ec0fb71f9340c7b543
  Author: k-hara <k.hara.pg@gmail.com>
  Date:   2015-08-25 (Tue, 25 Aug 2015)

  Changed paths:
    M src/struct.c
    M src/template.c
    M src/template.h
    M test/runnable/extra-files/test14198.d
    M test/runnable/link14198b.sh

  Log Message:
  -----------
  fix Issue 14431 - huge slowdown of compilation speed

In the pull request #4384, all instance has been changed to invoke semantic3(). It was for the link-failure issue in specific case, but it was too excessive.

1. Semantic analysis strategy for template instances:
  We cannot determine which instance does not need to be placed in object
file until semantic analysis completed. Therefore, for all templates
instantiated in root module, compiler should invoke their semantic3 --
regardless of whether those are also instantiated in non-root module. If
a template is _only_ instantiated in non-root module, we can elide its
semantic3 (and for the compilation speed we should do that).

2. Code generation strategy for template instances:
  If a template is instantiated in non-root module, compiler usually does
not have to put it in object file. But if a template is instantiated in
both of root and non-root modules which mutually import each other, it
needs to placed in objfile.


  Commit: 5b464f3393980a0229c079ff6e646ef843681996
      https://github.com/D-Programming-Language/dmd/commit/5b464f3393980a0229c079ff6e646ef843681996
  Author: k-hara <k.hara.pg@gmail.com>
  Date:   2015-08-25 (Tue, 25 Aug 2015)

  Changed paths:
    A test/runnable/imports/test14901a.d
    A test/runnable/imports/test14901b.d
    A test/runnable/imports/test14901c.d
    A test/runnable/imports/test14901d.d
    A test/runnable/test14901.d

  Log Message:
  -----------
  fix Issue 14901 - template static shared this() run multiple times with separate compilation


  Commit: 7cced26789de95e2e14c1452c7334d50f68f9deb
      https://github.com/D-Programming-Language/dmd/commit/7cced26789de95e2e14c1452c7334d50f68f9deb
  Author: k-hara <k.hara.pg@gmail.com>
  Date:   2015-08-28 (Fri, 28 Aug 2015)

  Changed paths:
    M src/template.c

  Log Message:
  -----------
  (will be squashed later) Better appendToModuleMember implementation and update comments


  Commit: a587c3d6a49c198822a0629071c401e62d592787
      https://github.com/D-Programming-Language/dmd/commit/a587c3d6a49c198822a0629071c401e62d592787
  Author: k-hara <k.hara.pg@gmail.com>
  Date:   2015-08-28 (Fri, 28 Aug 2015)

  Changed paths:
    M src/template.c
    A test/runnable/extra-files/linkdebug.d
    A test/runnable/extra-files/linkdebug_primitives.d
    A test/runnable/extra-files/linkdebug_range.d
    A test/runnable/extra-files/linkdebug_uni.d
    A test/runnable/linkdebug.sh

  Log Message:
  -----------
  Prefer instantiations from root modules when -debug/-unittest is specified


  Commit: cf56e5ad84164276f31f1d567ded97738a42191d
      https://github.com/D-Programming-Language/dmd/commit/cf56e5ad84164276f31f1d567ded97738a42191d
  Author: k-hara <k.hara.pg@gmail.com>
  Date:   2015-08-28 (Fri, 28 Aug 2015)

  Changed paths:
    M src/aggregate.h
    M src/expression.c
    M src/magicport.json
    M src/struct.c
    M src/toobj.c
    M src/typinf.c

  Log Message:
  -----------
  Elide codegen if TypeInfo is speculative

Even if a struct is defined as non-root symbol, some built-in operations request its TypeInfo. For those, today TypeInfo_Struct is generated in COMDAT.

On the other hand, TypeInfoDeclaration is always generated when the TypeInfo is requested,
even if the code exists in speculative scope. By that, some unneeded
TypeInfo objects had excessively generated.
If a TypeInfo is not actually used, we should stop its generation.

To satisfy two requirements, I added "speculative TypeInfo" concept associated with template instances.

By this change, when a TypeInfo is *requested*, the codegen pass still visit it always. But if the corresponding type is instantiated struct or its derived, and is definitely speculative, the TypeInfo code also won't be emit into object file.


  Commit: 0b45d187c8ddb7442e4f7a9fc8780bb1ac58dbbc
      https://github.com/D-Programming-Language/dmd/commit/0b45d187c8ddb7442e4f7a9fc8780bb1ac58dbbc
  Author: k-hara <k.hara.pg@gmail.com>
  Date:   2015-08-28 (Fri, 28 Aug 2015)

  Changed paths:
    M src/inline.c
    M src/struct.c

  Log Message:
  -----------
  More TypeInfo objects would be requested from inlined functions

1. When a non-root function is succeeded to expand for inlining, the additional TypeInfo requests should be handled properly.

2. When a function's semantic3 pass will get called from `canInline`, it
would generate more speculative instances when -debug/-unittest is specified.
If the additionally instantiated function succeeds to expand, it should be
changed to non-speculative, because its code is reachable from the final executable.


  Commit: cd29d5f34cbacebd83ecdb9727ab1b93f7fa6af1
      https://github.com/D-Programming-Language/dmd/commit/cd29d5f34cbacebd83ecdb9727ab1b93f7fa6af1
  Author: Rainer Schuetze <r.sagitario@gmx.de>
  Date:   2015-08-28 (Fri, 28 Aug 2015)

  Changed paths:
    M src/template.c
    A test/runnable/imports/link14541traits.d
    A test/runnable/link14541.d

  Log Message:
  -----------
  Merge pull request #4814 from 9rnsr/fix14541

Issue 14541 - "duplicate COMDAT" linker error with the template forward reference in Tuple.opAssign


  Commit: 083ea4a15049a25c4837d4720173d7b609d27916
      https://github.com/D-Programming-Language/dmd/commit/083ea4a15049a25c4837d4720173d7b609d27916
  Author: k-hara <k.hara.pg@gmail.com>
  Date:   2015-08-30 (Sun, 30 Aug 2015)

  Changed paths:
    M src/typinf.c

  Log Message:
  -----------
  Fix isSpeculativeType logic


  Commit: 92fcc9da72e2889406031a34d9a5d22b075f7d50
      https://github.com/D-Programming-Language/dmd/commit/92fcc9da72e2889406031a34d9a5d22b075f7d50
  Author: Martin Nowak <code@dawg.eu>
  Date:   2015-08-30 (Sun, 30 Aug 2015)

  Changed paths:
    M src/aggregate.h
    M src/expression.c
    M src/inline.c
    M src/magicport.json
    M src/struct.c
    M src/template.c
    M src/template.h
    M src/toobj.c
    M src/typinf.c
    A test/runnable/extra-files/linkdebug.d
    A test/runnable/extra-files/linkdebug_primitives.d
    A test/runnable/extra-files/linkdebug_range.d
    A test/runnable/extra-files/linkdebug_uni.d
    M test/runnable/extra-files/test14198.d
    A test/runnable/imports/link14541traits.d
    A test/runnable/imports/test14901a.d
    A test/runnable/imports/test14901b.d
    A test/runnable/imports/test14901c.d
    A test/runnable/imports/test14901d.d
    M test/runnable/link14198b.sh
    A test/runnable/link14541.d
    A test/runnable/linkdebug.sh
    A test/runnable/test14901.d

  Log Message:
  -----------
  Merge pull request #4944 from 9rnsr/fix14431

[REG 2.067.0] Issue 14431 - huge slowdown of compilation speed


Compare: https://github.com/D-Programming-Language/dmd/compare/b30556bf2ce1...92fcc9da72e2