mirror of
https://github.com/odin-lang/Odin.git
synced 2026-04-19 04:50:29 +00:00
fix another type alias issue with mini cycle
This commit is contained in:
@@ -3805,7 +3805,11 @@ gb_internal Type *check_type_expr(CheckerContext *ctx, Ast *e, Type *named_type)
|
||||
#if 0
|
||||
error(e, "Invalid type definition of '%.*s'", LIT(type->Named.name));
|
||||
#endif
|
||||
type->Named.base = t_invalid;
|
||||
if (type->Named.type_name->TypeName.is_type_alias) {
|
||||
// NOTE(laytan): keep it null, type declaration is a mini "cycle" to be filled later.
|
||||
} else {
|
||||
type->Named.base = t_invalid;
|
||||
}
|
||||
}
|
||||
|
||||
if (is_type_polymorphic(type)) {
|
||||
@@ -3823,7 +3827,7 @@ gb_internal Type *check_type_expr(CheckerContext *ctx, Ast *e, Type *named_type)
|
||||
}
|
||||
#endif
|
||||
|
||||
if (is_type_typed(type)) {
|
||||
if (type->kind == Type_Named && type->Named.base == nullptr || is_type_typed(type)) {
|
||||
add_type_and_value(ctx, e, Addressing_Type, type, empty_exact_value);
|
||||
} else {
|
||||
gbString name = type_to_string(type);
|
||||
|
||||
@@ -19,6 +19,7 @@ set COMMON=-define:ODIN_TEST_FANCY=false -file -vet -strict-style
|
||||
..\..\..\odin test ..\test_issue_4584.odin %COMMON% || exit /b
|
||||
..\..\..\odin build ..\test_issue_5043.odin %COMMON% || exit /b
|
||||
..\..\..\odin build ..\test_issue_5097.odin %COMMON% || exit /b
|
||||
..\..\..\odin build ..\test_issue_5097-2.odin %COMMON% || exit /b
|
||||
|
||||
@echo off
|
||||
|
||||
|
||||
@@ -26,6 +26,7 @@ else
|
||||
fi
|
||||
$ODIN build ../test_issue_5043.odin $COMMON
|
||||
$ODIN build ../test_issue_5097.odin $COMMON
|
||||
$ODIN build ../test_issue_5097-2.odin $COMMON
|
||||
|
||||
set +x
|
||||
|
||||
|
||||
24
tests/issues/test_issue_5097-2.odin
Normal file
24
tests/issues/test_issue_5097-2.odin
Normal file
@@ -0,0 +1,24 @@
|
||||
// Tests another variation of, this should compile #5097 https://github.com/odin-lang/Odin/issues/5097
|
||||
package test_issues
|
||||
|
||||
Face :: ^FaceRec
|
||||
GlyphSlot :: ^GlyphSlotRec
|
||||
Size :: ^SizeRec
|
||||
|
||||
SizeRec :: struct {
|
||||
face: Face,
|
||||
}
|
||||
|
||||
GlyphSlotRec :: struct {
|
||||
face: Face,
|
||||
}
|
||||
|
||||
FaceRec :: struct {
|
||||
glyph: GlyphSlot,
|
||||
size: Size,
|
||||
}
|
||||
|
||||
main :: proc() {
|
||||
face: Face
|
||||
_ = face
|
||||
}
|
||||
Reference in New Issue
Block a user