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
This commit is contained in:
Iain Buclaw 2019-06-16 07:47:57 +00:00
parent 347f5c885f
commit 22682e5b5f
5 changed files with 36 additions and 2 deletions

View File

@ -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.

View File

@ -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)

View File

@ -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);

View File

@ -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);

View File

@ -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;