diff options
author | Iain Buclaw <ibuclaw@gdcproject.org> | 2019-06-16 07:49:06 +0000 |
---|---|---|
committer | Iain Buclaw <ibuclaw@gcc.gnu.org> | 2019-06-16 07:49:06 +0000 |
commit | 88ad43b1f91f7cd2ba9c342c6c1a6da82e6088bf (patch) | |
tree | 57131c9c2449ea596790736ae8ad297416d7e1b9 /gcc/d/dmd/expressionsem.c | |
parent | a1543fb19ba17a455b0e9df5e373a1643082f5d2 (diff) | |
download | gcc-88ad43b1f91f7cd2ba9c342c6c1a6da82e6088bf.zip gcc-88ad43b1f91f7cd2ba9c342c6c1a6da82e6088bf.tar.gz gcc-88ad43b1f91f7cd2ba9c342c6c1a6da82e6088bf.tar.bz2 |
re PR d/90651 (ICE in FuncDeclaration::semantic3, at d/dmd/func.c:1524)
PR d/90651
d/dmd: Merge upstream dmd 0f6cbbcad
Fixes segmentation fault in FuncDeclaration::semantic3.
Reviewed-on: https://github.com/dlang/dmd/pull/10003
gcc/d/ChangeLog:
2019-06-16 Iain Buclaw <ibuclaw@gdcproject.org>
* typeinfo.cc (object_module): New variable.
(make_frontend_typeinfo): Update signature. Set temporary on
generated TypeInfo classes.
(create_tinfo_types): Set object_module. Move generation of front-end
typeinfo into ...
(create_frontend_tinfo_types): ... New function.
(layout_typeinfo): Call create_frontend_tinfo_types.
(layout_classinfo): Likewise.
(layout_cpp_typeinfo): Likewise.
(create_typeinfo): Likewise.
From-SVN: r272345
Diffstat (limited to 'gcc/d/dmd/expressionsem.c')
-rw-r--r-- | gcc/d/dmd/expressionsem.c | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/gcc/d/dmd/expressionsem.c b/gcc/d/dmd/expressionsem.c index ebdfae5..5177f9f 100644 --- a/gcc/d/dmd/expressionsem.c +++ b/gcc/d/dmd/expressionsem.c @@ -1806,11 +1806,19 @@ public: Expression *e; if (ea && ta->toBasetype()->ty == Tclass) { - /* Get the dynamic type, which is .classinfo - */ - ea = semantic(ea, sc); - e = new TypeidExp(ea->loc, ea); - e->type = Type::typeinfoclass->type; + if (!Type::typeinfoclass) + { + error(exp->loc, "`object.TypeInfo_Class` could not be found, but is implicitly used"); + e = new ErrorExp(); + } + else + { + /* Get the dynamic type, which is .classinfo + */ + ea = semantic(ea, sc); + e = new TypeidExp(ea->loc, ea); + e->type = Type::typeinfoclass->type; + } } else if (ta->ty == Terror) { |