From 22682e5b5f7cc596b165534ad9b8f201354126ce Mon Sep 17 00:00:00 2001 From: Iain Buclaw Date: Sun, 16 Jun 2019 07:47:57 +0000 Subject: [PATCH] re PR d/90661 (ICE in AlignDeclaration::syntaxCopy, at d/dmd/attrib.c:670) PR d/90661 d/dmd: Merge upstream dmd c74e624c9 Fixes segmentation fault in AlignDeclaration::syntaxCopy. Reviewed-on: https://github.com/dlang/dmd/pull/10001 From-SVN: r272341 --- gcc/d/dmd/MERGE | 2 +- gcc/d/dmd/attrib.c | 3 ++- gcc/testsuite/gdc.test/compilable/aggr_alignment.d | 13 +++++++++++++ gcc/testsuite/gdc.test/fail_compilation/fail19914.d | 10 ++++++++++ gcc/testsuite/gdc.test/fail_compilation/fail19915.d | 10 ++++++++++ 5 files changed, 36 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/gdc.test/fail_compilation/fail19914.d create mode 100644 gcc/testsuite/gdc.test/fail_compilation/fail19915.d diff --git a/gcc/d/dmd/MERGE b/gcc/d/dmd/MERGE index e100264fed8..6edc63a2014 100644 --- a/gcc/d/dmd/MERGE +++ b/gcc/d/dmd/MERGE @@ -1,4 +1,4 @@ -78dc311524341a76008b341ff6427e5a16e285db +c74e624c9a0a9e7e39f96b2f005f86e123df56c9 The first line of this file holds the git revision number of the last merge done from the dlang/dmd repository. diff --git a/gcc/d/dmd/attrib.c b/gcc/d/dmd/attrib.c index a6686381485..6cd715ce08b 100644 --- a/gcc/d/dmd/attrib.c +++ b/gcc/d/dmd/attrib.c @@ -667,7 +667,8 @@ Dsymbol *AlignDeclaration::syntaxCopy(Dsymbol *s) { assert(!s); return new AlignDeclaration(loc, - ealign->syntaxCopy(), Dsymbol::arraySyntaxCopy(decl)); + ealign ? ealign->syntaxCopy() : NULL, + Dsymbol::arraySyntaxCopy(decl)); } Scope *AlignDeclaration::newScope(Scope *sc) diff --git a/gcc/testsuite/gdc.test/compilable/aggr_alignment.d b/gcc/testsuite/gdc.test/compilable/aggr_alignment.d index 3a80a039e26..bf602ff31a4 100644 --- a/gcc/testsuite/gdc.test/compilable/aggr_alignment.d +++ b/gcc/testsuite/gdc.test/compilable/aggr_alignment.d @@ -26,3 +26,16 @@ enum payloadOffset = C2.bytes.offsetof; static assert(C2.int1.offsetof == payloadOffset + 8); static assert(C2.alignof == size_t.sizeof); static assert(__traits(classInstanceSize, C2) == payloadOffset + 12); + + +/***************************************************/ +// https://issues.dlang.org/show_bug.cgi?id=19914 +// https://issues.dlang.org/show_bug.cgi?id=19915 + +class TemplatedClass(T) +{ + align T field; +} + +mixin TemplatedClass!(string); +alias TCint = TemplatedClass!(int); diff --git a/gcc/testsuite/gdc.test/fail_compilation/fail19914.d b/gcc/testsuite/gdc.test/fail_compilation/fail19914.d new file mode 100644 index 00000000000..a890d35e85b --- /dev/null +++ b/gcc/testsuite/gdc.test/fail_compilation/fail19914.d @@ -0,0 +1,10 @@ +// PERMUTE_ARGS: +/* +TEST_OUTPUT: +--- +fail_compilation/fail19914.d(9): Error: undefined identifier `c` in module `fail19914` +fail_compilation/fail19914.d(10): Error: mixin `fail19914.a!string` error instantiating +--- +*/ +class a(b) { align.c d; } +mixin a!(string); diff --git a/gcc/testsuite/gdc.test/fail_compilation/fail19915.d b/gcc/testsuite/gdc.test/fail_compilation/fail19915.d new file mode 100644 index 00000000000..17e05ee32c2 --- /dev/null +++ b/gcc/testsuite/gdc.test/fail_compilation/fail19915.d @@ -0,0 +1,10 @@ +// PERMUTE_ARGS: +/* +TEST_OUTPUT: +--- +fail_compilation/fail19915.d(9): Error: undefined identifier `c` in module `fail19915` +fail_compilation/fail19915.d(10): Error: template instance `fail19915.a!int` error instantiating +--- +*/ +class a (b) { align.c d; } +alias a!(int) e; -- 2.30.2