Skip to content

Commit

Permalink
fix Issue 13131 - [2.066-b3] dmd: glue.c:1492: unsigned int totym(Typ…
Browse files Browse the repository at this point in the history
…e*): Assertion `0' failed.
  • Loading branch information
9rnsr committed Jul 15, 2014
1 parent d182caf commit 1bf1759
Show file tree
Hide file tree
Showing 6 changed files with 70 additions and 1 deletion.
9 changes: 9 additions & 0 deletions src/declaration.c
Expand Up @@ -512,6 +512,15 @@ void AliasDeclaration::semantic(Scope *sc)
Type *t;
Expression *e;

// Ungag errors when not instantiated DeclDefs scope alias
Ungag ungag(global.gag);
//printf("%s parent = %s, specgag= %d, instantiated = %d\n", toChars(), parent, global.isSpeculativeGagging(), isInstantiated());
if (parent && global.isSpeculativeGagging() && !isInstantiated() && !toParent2()->isFuncDeclaration())
{
//printf("%s type = %s\n", toPrettyChars(), type->toChars());
global.gag = 0;
}

/* This section is needed because resolve() will:
* const x = 3;
* alias x y;
Expand Down
2 changes: 1 addition & 1 deletion src/traits.c
Expand Up @@ -700,7 +700,7 @@ Expression *semanticTraits(TraitsExp *e, Scope *sc)
e->error("first argument is not a symbol");
goto Lfalse;
}
//printf("getAttributes %s, attrs = %p, scope = %p\n", s->toChars(), s->userAttributes, s->userAttributesScope);
//printf("getAttributes %s, attrs = %p, scope = %p\n", s->toChars(), s->userAttribDecl, s->scope);
UserAttributeDeclaration *udad = s->userAttribDecl;
TupleExp *tup = new TupleExp(e->loc, udad ? udad->getAttributes() : new Expressions());
return tup->semantic(sc);
Expand Down
20 changes: 20 additions & 0 deletions test/fail_compilation/ice13131.d
@@ -0,0 +1,20 @@
// EXTRA_SOURCES: imports/a13131parameters.d imports/a13131elec.d
/*
TEST_OUTPUT:
---
+A
+B
fail_compilation/imports/a13131elec.d(10): Error: template instance elecConnOf!gconn template 'elecConnOf' is not defined
-B
-A
---
*/

void main()
{
struct Connectivity {}
auto L = Connectivity();

import imports.a13131elec; // [1] import
L.initElec;
}
17 changes: 17 additions & 0 deletions test/fail_compilation/imports/a13131checkpoint.d
@@ -0,0 +1,17 @@
module imports.a13131checkpoint;

mixin(createGlobalsMixins); // [3] mixin

auto createGlobalsMixins() // [4] semantic3
{
pragma(msg, "+A");
enum fullModuleName = "imports.a13131parameters"; // necessary
foreach (e ; __traits(derivedMembers, mixin(fullModuleName)))
{
// [5] see imports.parameters (it's listed in command line)
static if ( __traits(compiles, mixin(`__traits(getAttributes, `~fullModuleName~`.`~e~`)`))) {}
}
pragma(msg, "-A");

return "";
}
10 changes: 10 additions & 0 deletions test/fail_compilation/imports/a13131elec.d
@@ -0,0 +1,10 @@
module imports.a13131elec;

import imports.a13131checkpoint; // [2] import

void initElec(T)(T L)
{
immutable cv = econn.velocities; // econn is invalid so generates ErrorExp
}

alias econn = elecConnOf!gconn; // invalid declaration
13 changes: 13 additions & 0 deletions test/fail_compilation/imports/a13131parameters.d
@@ -0,0 +1,13 @@
module imports.a13131parameters;

auto createParameterMixins() // auto is necessary to invoke semantic3 to calculate full signature
{
pragma(msg, "+B");
enum fullModuleName = "imports.a13131elec"; // necessary
foreach (e ; __traits(derivedMembers, mixin(fullModuleName)))
{
// will access yet-not semantic analyzed invalid symbol 'econn' in imports.elec
static if ( __traits(compiles, mixin(`__traits(getAttributes, `~fullModuleName~`.`~e~`)`))) {}
}
pragma(msg, "-B");
}

0 comments on commit 1bf1759

Please sign in to comment.