diff options
| author | Andrew Kelley <superjoe30@gmail.com> | 2016-01-31 02:17:08 -0700 |
|---|---|---|
| committer | Andrew Kelley <superjoe30@gmail.com> | 2016-01-31 02:17:08 -0700 |
| commit | 4c1f0f02d021f7897e530c4406607a959bdb5c79 (patch) | |
| tree | e853e095b2e6b66e3cc6dc723b1e6b52bac127c0 /src/parseh.cpp | |
| parent | 80a4898e4472124ab689e588d80c42831b236ea4 (diff) | |
| download | zig-4c1f0f02d021f7897e530c4406607a959bdb5c79.tar.gz zig-4c1f0f02d021f7897e530c4406607a959bdb5c79.zip | |
fix some parseh crashes
Diffstat (limited to 'src/parseh.cpp')
| -rw-r--r-- | src/parseh.cpp | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/src/parseh.cpp b/src/parseh.cpp index add4b7a70b..78db01f2ce 100644 --- a/src/parseh.cpp +++ b/src/parseh.cpp @@ -349,7 +349,15 @@ static TypeTableEntry *resolve_type_with_table(Context *c, const Type *ty, const return c->codegen->builtin_types.entry_usize; } else { auto entry = type_table->maybe_get(type_name); - return entry ? entry->value : c->codegen->builtin_types.entry_invalid; + if (entry) { + if (get_underlying_type(entry->value)->id == TypeTableEntryIdInvalid) { + return c->codegen->builtin_types.entry_invalid; + } else { + return entry->value; + } + } else { + return c->codegen->builtin_types.entry_invalid; + } } } case Type::Elaborated: @@ -405,7 +413,7 @@ static TypeTableEntry *resolve_type_with_table(Context *c, const Type *ty, const fn_type_id.return_type = c->codegen->builtin_types.entry_unreachable; } else { fn_type_id.return_type = resolve_qual_type(c, fn_proto_ty->getReturnType(), decl); - if (fn_type_id.return_type->id == TypeTableEntryIdInvalid) { + if (get_underlying_type(fn_type_id.return_type)->id == TypeTableEntryIdInvalid) { return c->codegen->builtin_types.entry_invalid; } } @@ -415,7 +423,7 @@ static TypeTableEntry *resolve_type_with_table(Context *c, const Type *ty, const QualType qt = fn_proto_ty->getParamType(i); TypeTableEntry *param_type = resolve_qual_type(c, qt, decl); - if (param_type->id == TypeTableEntryIdInvalid) { + if (get_underlying_type(param_type)->id == TypeTableEntryIdInvalid) { return c->codegen->builtin_types.entry_invalid; } |
