From d3db91536cfab24a2b686b91ebb6376503110609 Mon Sep 17 00:00:00 2001 From: Christoffer Lerno Date: Sat, 20 Sep 2025 15:00:44 +0200 Subject: [PATCH] Incorrect nameof on nested struct names. #2492 --- releasenotes.md | 1 + src/compiler/ast.c | 16 ++- src/compiler/module.c | 21 ++++ src/compiler/parse_global.c | 6 + src/utils/lib.h | 1 + .../bitstruct/embedded_bitstruct.c3t | 4 +- test/test_suite/compile_time/ct_memberof.c3t | 104 +++++++++--------- .../test_suite/expressions/pointer_access.c3t | 6 +- test/test_suite/struct/nested_struct_init.c3t | 13 +-- .../struct/nested_struct_union_init.c3t | 2 +- .../test_suite/visibility/export_property.c3t | 2 +- 11 files changed, 105 insertions(+), 71 deletions(-) diff --git a/releasenotes.md b/releasenotes.md index 53da49918..1cc0a6e7a 100644 --- a/releasenotes.md +++ b/releasenotes.md @@ -35,6 +35,7 @@ - Compiler segfault for invalid e-mails in project.json. #2488 - Taking `.ordinal` from an enum passed by pointer and then taking the address of this result would return the enum, not int. - Alias and distinct types didn't check the underlying type wasn't compile time or optional. +- Incorrect nameof on nested struct names. #2492 ### Stdlib changes - Added generic `InterfaceList` to store a list of values that implement a specific interface diff --git a/src/compiler/ast.c b/src/compiler/ast.c index f18fe1248..697c6388d 100644 --- a/src/compiler/ast.c +++ b/src/compiler/ast.c @@ -483,10 +483,7 @@ void scratch_buffer_set_extern_decl_name(Decl *decl, bool clear) Type *parent = type_infoptr(decl->func_decl.type_parent)->type->canonical; if (type_is_user_defined(parent)) { - Decl *parent_decl = parent->decl; - if (parent_decl->unit && parent_decl->unit->module) scratch_buffer_append_module(parent_decl->unit->module, decl->is_export); - scratch_buffer_append(decl->is_export ? "__" : "."); - scratch_buffer_append(parent->name); + scratch_buffer_set_extern_decl_name(parent->decl, false); scratch_buffer_append(decl->is_export ? "__" : "."); scratch_buffer_append(decl->name); return; @@ -501,7 +498,16 @@ void scratch_buffer_set_extern_decl_name(Decl *decl, bool clear) Module *module = decl->unit ? decl->unit->module : NULL; if (module) scratch_buffer_append_module(module, decl->is_export); scratch_buffer_append(decl->is_export ? "__" : "."); - scratch_buffer_append(decl->name ? decl->name : "$anon"); + const char *name = decl_is_user_defined_type(decl) ? decl->type->name : decl->name; + if (!name) name = "$anon"; + if (decl->is_export) + { + scratch_buffer_append_but_mangle_underscore_dot(name); + } + else + { + scratch_buffer_append(name); + } if (decl->visibility == VISIBLE_LOCAL) { assert(module); diff --git a/src/compiler/module.c b/src/compiler/module.c index 329f773c3..9df4b6a31 100644 --- a/src/compiler/module.c +++ b/src/compiler/module.c @@ -10,6 +10,27 @@ Decl *module_find_symbol(Module *module, const char *symbol) return decl && decl->visibility != VISIBLE_LOCAL ? decl : NULL; } +void scratch_buffer_append_but_mangle_underscore_dot(const char *name) +{ + char c; + while ((c = *(name++)) != 0) + { + switch (c) + { + case ':': + ASSERT(name[0] == ':'); + scratch_buffer_append_char('_'); + name++; + break; + case '.': + scratch_buffer_append("__"); + break; + default: + scratch_buffer_append_char(c); + break; + } + } +} void scratch_buffer_append_module(Module *module, bool is_export) { if (module->extname) diff --git a/src/compiler/parse_global.c b/src/compiler/parse_global.c index 86ff53558..907e406c3 100644 --- a/src/compiler/parse_global.c +++ b/src/compiler/parse_global.c @@ -1791,6 +1791,12 @@ static bool parse_struct_body(ParseContext *c, Decl *parent) member = decl_new_with_type(symstr(c), c->span, decl_kind); advance_and_verify(c, TOKEN_IDENT); } + scratch_buffer_clear(); + scratch_buffer_append(parent->type->name); + scratch_buffer_append("."); + scratch_buffer_append(member->name ? member->name : "$anon"); + member->type->name = scratch_buffer_interned(); + member->strukt.parent = declid(parent); if (decl_kind == DECL_BITSTRUCT) { diff --git a/src/utils/lib.h b/src/utils/lib.h index bd526a3a2..ec3243aa1 100644 --- a/src/utils/lib.h +++ b/src/utils/lib.h @@ -179,6 +179,7 @@ void scratch_buffer_append_remove_space(const char *start, int len); void scratch_buffer_append_signed_int(int64_t i); void scratch_buffer_append_double(double d); void scratch_buffer_append_shell_escaped(const char *string); +void scratch_buffer_append_but_mangle_underscore_dot(const char *name); void scratch_buffer_append_cmd_argument(const char *string); UNUSED void scratch_buffer_append_unsigned_int(uint64_t i); void scratch_buffer_printf(const char *format, ...); diff --git a/test/test_suite/bitstruct/embedded_bitstruct.c3t b/test/test_suite/bitstruct/embedded_bitstruct.c3t index 6ddc713f9..2c391c9ff 100644 --- a/test/test_suite/bitstruct/embedded_bitstruct.c3t +++ b/test/test_suite/bitstruct/embedded_bitstruct.c3t @@ -57,7 +57,7 @@ entry: %ashr = ashr i32 %shl, 23 %1 = load i32, ptr %ptradd, align 4 call void (ptr, ...) @printf(ptr @.str, i32 %1, i32 %ashr) - call void @llvm.memcpy.p0.p0.i32(ptr align 4 %f, ptr align 4 @.__const.10, i32 16, i1 false) + call void @llvm.memcpy.p0.p0.i32(ptr align 4 %f, ptr align 4 @.__const.7, i32 16, i1 false) %ptradd2 = getelementptr inbounds i8, ptr %f, i64 4 %ptradd3 = getelementptr inbounds i8, ptr %f, i64 8 %ptradd4 = getelementptr inbounds i8, ptr %f, i64 12 @@ -65,6 +65,6 @@ entry: %3 = load i32, ptr %ptradd2, align 4 %4 = load i32, ptr %ptradd3, align 4 %5 = load i32, ptr %ptradd4, align 4 - call void (ptr, ...) @printf(ptr @.str.11, i32 %2, i32 %3, i32 %4, i32 %5) + call void (ptr, ...) @printf(ptr @.str.8, i32 %2, i32 %3, i32 %4, i32 %5) ret void } diff --git a/test/test_suite/compile_time/ct_memberof.c3t b/test/test_suite/compile_time/ct_memberof.c3t index 4790103fe..cba789129 100644 --- a/test/test_suite/compile_time/ct_memberof.c3t +++ b/test/test_suite/compile_time/ct_memberof.c3t @@ -258,7 +258,7 @@ noerr_block13: ; preds = %after_check11 voiderr: ; preds = %noerr_block13, %guard_block12, %guard_block6, %guard_block %10 = call ptr @std.io.stdout() - %11 = call i64 @std.io.File.write(ptr %retparam17, ptr %10, ptr @.str.10, i64 3) + %11 = call i64 @std.io.File.write(ptr %retparam17, ptr %10, ptr @.str.7, i64 3) %not_err18 = icmp eq i64 %11, 0 %12 = call i1 @llvm.expect.i1(i1 %not_err18, i1 true) br i1 %12, label %after_check20, label %assign_optional19 @@ -314,7 +314,7 @@ noerr_block34: ; preds = %after_check32 voiderr36: ; preds = %noerr_block34, %guard_block33, %guard_block27, %guard_block21 %19 = call ptr @std.io.stdout() - %20 = call i64 @std.io.File.write(ptr %retparam40, ptr %19, ptr @.str.11, i64 6) + %20 = call i64 @std.io.File.write(ptr %retparam40, ptr %19, ptr @.str.8, i64 6) %not_err41 = icmp eq i64 %20, 0 %21 = call i1 @llvm.expect.i1(i1 %not_err41, i1 true) br i1 %21, label %after_check43, label %assign_optional42 @@ -370,7 +370,7 @@ noerr_block57: ; preds = %after_check55 voiderr59: ; preds = %noerr_block57, %guard_block56, %guard_block50, %guard_block44 %28 = call ptr @std.io.stdout() - %29 = call i64 @std.io.File.write(ptr %retparam63, ptr %28, ptr @.str.12, i64 6) + %29 = call i64 @std.io.File.write(ptr %retparam63, ptr %28, ptr @.str.9, i64 6) %not_err64 = icmp eq i64 %29, 0 %30 = call i1 @llvm.expect.i1(i1 %not_err64, i1 true) br i1 %30, label %after_check66, label %assign_optional65 @@ -426,7 +426,7 @@ noerr_block80: ; preds = %after_check78 voiderr82: ; preds = %noerr_block80, %guard_block79, %guard_block73, %guard_block67 %37 = call ptr @std.io.stdout() - %38 = call i64 @std.io.File.write(ptr %retparam86, ptr %37, ptr @.str.13, i64 5) + %38 = call i64 @std.io.File.write(ptr %retparam86, ptr %37, ptr @.str.10, i64 5) %not_err87 = icmp eq i64 %38, 0 %39 = call i1 @llvm.expect.i1(i1 %not_err87, i1 true) br i1 %39, label %after_check89, label %assign_optional88 @@ -482,7 +482,7 @@ noerr_block103: ; preds = %after_check101 voiderr105: ; preds = %noerr_block103, %guard_block102, %guard_block96, %guard_block90 %46 = call ptr @std.io.stdout() - %47 = call i64 @std.io.File.write(ptr %retparam109, ptr %46, ptr @.str.14, i64 4) + %47 = call i64 @std.io.File.write(ptr %retparam109, ptr %46, ptr @.str.11, i64 4) %not_err110 = icmp eq i64 %47, 0 %48 = call i1 @llvm.expect.i1(i1 %not_err110, i1 true) br i1 %48, label %after_check112, label %assign_optional111 @@ -538,7 +538,7 @@ noerr_block126: ; preds = %after_check124 voiderr128: ; preds = %noerr_block126, %guard_block125, %guard_block119, %guard_block113 %55 = call ptr @std.io.stdout() - %56 = call i64 @std.io.File.write(ptr %retparam132, ptr %55, ptr @.str.15, i64 3) + %56 = call i64 @std.io.File.write(ptr %retparam132, ptr %55, ptr @.str.12, i64 3) %not_err133 = icmp eq i64 %56, 0 %57 = call i1 @llvm.expect.i1(i1 %not_err133, i1 true) br i1 %57, label %after_check135, label %assign_optional134 @@ -593,125 +593,125 @@ noerr_block149: ; preds = %after_check147 br label %voiderr151 voiderr151: ; preds = %noerr_block149, %guard_block148, %guard_block142, %guard_block136 - store %"char[]" { ptr @.str.17, i64 3 }, ptr %taddr, align 8 + store %"char[]" { ptr @.str.14, i64 3 }, ptr %taddr, align 8 %64 = insertvalue %any undef, ptr %taddr, 0 %65 = insertvalue %any %64, i64 ptrtoint (ptr @"$ct.String" to i64), 1 store %any %65, ptr %varargslots, align 16 - %66 = call i64 @std.io.printfn(ptr %retparam152, ptr @.str.16, i64 8, ptr %varargslots, i64 1) - store %"char[]" { ptr @.str.19, i64 1 }, ptr %taddr156, align 8 + %66 = call i64 @std.io.printfn(ptr %retparam152, ptr @.str.13, i64 8, ptr %varargslots, i64 1) + store %"char[]" { ptr @.str.16, i64 1 }, ptr %taddr156, align 8 %67 = insertvalue %any undef, ptr %taddr156, 0 %68 = insertvalue %any %67, i64 ptrtoint (ptr @"$ct.String" to i64), 1 store %any %68, ptr %varargslots155, align 16 - store %"char[]" { ptr @.str.20, i64 3 }, ptr %taddr157, align 8 + store %"char[]" { ptr @.str.17, i64 3 }, ptr %taddr157, align 8 %69 = insertvalue %any undef, ptr %taddr157, 0 %70 = insertvalue %any %69, i64 ptrtoint (ptr @"$ct.String" to i64), 1 %ptradd = getelementptr inbounds i8, ptr %varargslots155, i64 16 store %any %70, ptr %ptradd, align 16 - %71 = call i64 @std.io.printfn(ptr %retparam158, ptr @.str.18, i64 6, ptr %varargslots155, i64 2) - store %"char[]" { ptr @.str.22, i64 4 }, ptr %taddr162, align 8 + %71 = call i64 @std.io.printfn(ptr %retparam158, ptr @.str.15, i64 6, ptr %varargslots155, i64 2) + store %"char[]" { ptr @.str.19, i64 4 }, ptr %taddr162, align 8 %72 = insertvalue %any undef, ptr %taddr162, 0 %73 = insertvalue %any %72, i64 ptrtoint (ptr @"$ct.String" to i64), 1 store %any %73, ptr %varargslots161, align 16 - store %"char[]" { ptr @.str.23, i64 4 }, ptr %taddr163, align 8 + store %"char[]" { ptr @.str.20, i64 8 }, ptr %taddr163, align 8 %74 = insertvalue %any undef, ptr %taddr163, 0 %75 = insertvalue %any %74, i64 ptrtoint (ptr @"$ct.String" to i64), 1 %ptradd164 = getelementptr inbounds i8, ptr %varargslots161, i64 16 store %any %75, ptr %ptradd164, align 16 - %76 = call i64 @std.io.printfn(ptr %retparam165, ptr @.str.21, i64 6, ptr %varargslots161, i64 2) + %76 = call i64 @std.io.printfn(ptr %retparam165, ptr @.str.18, i64 6, ptr %varargslots161, i64 2) store %"char[]" { ptr @.emptystr, i64 0 }, ptr %taddr169, align 8 %77 = insertvalue %any undef, ptr %taddr169, 0 %78 = insertvalue %any %77, i64 ptrtoint (ptr @"$ct.String" to i64), 1 store %any %78, ptr %varargslots168, align 16 - store %"char[]" { ptr @.str.25, i64 5 }, ptr %taddr170, align 8 + store %"char[]" { ptr @.str.22, i64 9 }, ptr %taddr170, align 8 %79 = insertvalue %any undef, ptr %taddr170, 0 %80 = insertvalue %any %79, i64 ptrtoint (ptr @"$ct.String" to i64), 1 %ptradd171 = getelementptr inbounds i8, ptr %varargslots168, i64 16 store %any %80, ptr %ptradd171, align 16 - %81 = call i64 @std.io.printfn(ptr %retparam172, ptr @.str.24, i64 6, ptr %varargslots168, i64 2) - store %"char[]" { ptr @.str.27, i64 1 }, ptr %taddr176, align 8 + %81 = call i64 @std.io.printfn(ptr %retparam172, ptr @.str.21, i64 6, ptr %varargslots168, i64 2) + store %"char[]" { ptr @.str.24, i64 1 }, ptr %taddr176, align 8 %82 = insertvalue %any undef, ptr %taddr176, 0 %83 = insertvalue %any %82, i64 ptrtoint (ptr @"$ct.String" to i64), 1 store %any %83, ptr %varargslots175, align 16 - store %"char[]" { ptr @.str.28, i64 6 }, ptr %taddr177, align 8 + store %"char[]" { ptr @.str.25, i64 6 }, ptr %taddr177, align 8 %84 = insertvalue %any undef, ptr %taddr177, 0 %85 = insertvalue %any %84, i64 ptrtoint (ptr @"$ct.String" to i64), 1 %ptradd178 = getelementptr inbounds i8, ptr %varargslots175, i64 16 store %any %85, ptr %ptradd178, align 16 - %86 = call i64 @std.io.printfn(ptr %retparam179, ptr @.str.26, i64 6, ptr %varargslots175, i64 2) - store %"char[]" { ptr @.str.30, i64 3 }, ptr %taddr183, align 8 + %86 = call i64 @std.io.printfn(ptr %retparam179, ptr @.str.23, i64 6, ptr %varargslots175, i64 2) + store %"char[]" { ptr @.str.27, i64 3 }, ptr %taddr183, align 8 %87 = insertvalue %any undef, ptr %taddr183, 0 %88 = insertvalue %any %87, i64 ptrtoint (ptr @"$ct.String" to i64), 1 store %any %88, ptr %varargslots182, align 16 - %89 = call i64 @std.io.printfn(ptr %retparam184, ptr @.str.29, i64 8, ptr %varargslots182, i64 1) - store %"char[]" { ptr @.str.32, i64 1 }, ptr %taddr188, align 8 + %89 = call i64 @std.io.printfn(ptr %retparam184, ptr @.str.26, i64 8, ptr %varargslots182, i64 1) + store %"char[]" { ptr @.str.29, i64 1 }, ptr %taddr188, align 8 %90 = insertvalue %any undef, ptr %taddr188, 0 %91 = insertvalue %any %90, i64 ptrtoint (ptr @"$ct.String" to i64), 1 store %any %91, ptr %varargslots187, align 16 - store %"char[]" { ptr @.str.33, i64 4 }, ptr %taddr189, align 8 + store %"char[]" { ptr @.str.30, i64 4 }, ptr %taddr189, align 8 %92 = insertvalue %any undef, ptr %taddr189, 0 %93 = insertvalue %any %92, i64 ptrtoint (ptr @"$ct.String" to i64), 1 %ptradd190 = getelementptr inbounds i8, ptr %varargslots187, i64 16 store %any %93, ptr %ptradd190, align 16 - %94 = call i64 @std.io.printfn(ptr %retparam191, ptr @.str.31, i64 6, ptr %varargslots187, i64 2) - store %"char[]" { ptr @.str.35, i64 1 }, ptr %taddr195, align 8 + %94 = call i64 @std.io.printfn(ptr %retparam191, ptr @.str.28, i64 6, ptr %varargslots187, i64 2) + store %"char[]" { ptr @.str.32, i64 1 }, ptr %taddr195, align 8 %95 = insertvalue %any undef, ptr %taddr195, 0 %96 = insertvalue %any %95, i64 ptrtoint (ptr @"$ct.String" to i64), 1 store %any %96, ptr %varargslots194, align 16 - store %"char[]" { ptr @.str.36, i64 5 }, ptr %taddr196, align 8 + store %"char[]" { ptr @.str.33, i64 5 }, ptr %taddr196, align 8 %97 = insertvalue %any undef, ptr %taddr196, 0 %98 = insertvalue %any %97, i64 ptrtoint (ptr @"$ct.String" to i64), 1 %ptradd197 = getelementptr inbounds i8, ptr %varargslots194, i64 16 store %any %98, ptr %ptradd197, align 16 - %99 = call i64 @std.io.printfn(ptr %retparam198, ptr @.str.34, i64 6, ptr %varargslots194, i64 2) + %99 = call i64 @std.io.printfn(ptr %retparam198, ptr @.str.31, i64 6, ptr %varargslots194, i64 2) store %"char[]" { ptr @.emptystr, i64 0 }, ptr %taddr202, align 8 %100 = insertvalue %any undef, ptr %taddr202, 0 %101 = insertvalue %any %100, i64 ptrtoint (ptr @"$ct.String" to i64), 1 store %any %101, ptr %varargslots201, align 16 - store %"char[]" { ptr @.str.38, i64 5 }, ptr %taddr203, align 8 + store %"char[]" { ptr @.str.35, i64 9 }, ptr %taddr203, align 8 %102 = insertvalue %any undef, ptr %taddr203, 0 %103 = insertvalue %any %102, i64 ptrtoint (ptr @"$ct.String" to i64), 1 %ptradd204 = getelementptr inbounds i8, ptr %varargslots201, i64 16 store %any %103, ptr %ptradd204, align 16 - %104 = call i64 @std.io.printfn(ptr %retparam205, ptr @.str.37, i64 6, ptr %varargslots201, i64 2) - store %"char[]" { ptr @.str.40, i64 3 }, ptr %taddr209, align 8 + %104 = call i64 @std.io.printfn(ptr %retparam205, ptr @.str.34, i64 6, ptr %varargslots201, i64 2) + store %"char[]" { ptr @.str.37, i64 3 }, ptr %taddr209, align 8 %105 = insertvalue %any undef, ptr %taddr209, 0 %106 = insertvalue %any %105, i64 ptrtoint (ptr @"$ct.String" to i64), 1 store %any %106, ptr %varargslots208, align 16 - store %"char[]" { ptr @.str.41, i64 3 }, ptr %taddr210, align 8 + store %"char[]" { ptr @.str.38, i64 7 }, ptr %taddr210, align 8 %107 = insertvalue %any undef, ptr %taddr210, 0 %108 = insertvalue %any %107, i64 ptrtoint (ptr @"$ct.String" to i64), 1 %ptradd211 = getelementptr inbounds i8, ptr %varargslots208, i64 16 store %any %108, ptr %ptradd211, align 16 - %109 = call i64 @std.io.printfn(ptr %retparam212, ptr @.str.39, i64 6, ptr %varargslots208, i64 2) - store %"char[]" { ptr @.str.43, i64 4 }, ptr %taddr216, align 8 + %109 = call i64 @std.io.printfn(ptr %retparam212, ptr @.str.36, i64 6, ptr %varargslots208, i64 2) + store %"char[]" { ptr @.str.40, i64 4 }, ptr %taddr216, align 8 %110 = insertvalue %any undef, ptr %taddr216, 0 %111 = insertvalue %any %110, i64 ptrtoint (ptr @"$ct.String" to i64), 1 store %any %111, ptr %varargslots215, align 16 - %112 = call i64 @std.io.printfn(ptr %retparam217, ptr @.str.42, i64 8, ptr %varargslots215, i64 1) - store %"char[]" { ptr @.str.45, i64 1 }, ptr %taddr221, align 8 + %112 = call i64 @std.io.printfn(ptr %retparam217, ptr @.str.39, i64 8, ptr %varargslots215, i64 1) + store %"char[]" { ptr @.str.42, i64 1 }, ptr %taddr221, align 8 %113 = insertvalue %any undef, ptr %taddr221, 0 %114 = insertvalue %any %113, i64 ptrtoint (ptr @"$ct.String" to i64), 1 store %any %114, ptr %varargslots220, align 16 - store %"char[]" { ptr @.str.46, i64 3 }, ptr %taddr222, align 8 + store %"char[]" { ptr @.str.43, i64 3 }, ptr %taddr222, align 8 %115 = insertvalue %any undef, ptr %taddr222, 0 %116 = insertvalue %any %115, i64 ptrtoint (ptr @"$ct.String" to i64), 1 %ptradd223 = getelementptr inbounds i8, ptr %varargslots220, i64 16 store %any %116, ptr %ptradd223, align 16 - %117 = call i64 @std.io.printfn(ptr %retparam224, ptr @.str.44, i64 6, ptr %varargslots220, i64 2) - store %"char[]" { ptr @.str.48, i64 1 }, ptr %taddr228, align 8 + %117 = call i64 @std.io.printfn(ptr %retparam224, ptr @.str.41, i64 6, ptr %varargslots220, i64 2) + store %"char[]" { ptr @.str.45, i64 1 }, ptr %taddr228, align 8 %118 = insertvalue %any undef, ptr %taddr228, 0 %119 = insertvalue %any %118, i64 ptrtoint (ptr @"$ct.String" to i64), 1 store %any %119, ptr %varargslots227, align 16 - store %"char[]" { ptr @.str.49, i64 5 }, ptr %taddr229, align 8 + store %"char[]" { ptr @.str.46, i64 5 }, ptr %taddr229, align 8 %120 = insertvalue %any undef, ptr %taddr229, 0 %121 = insertvalue %any %120, i64 ptrtoint (ptr @"$ct.String" to i64), 1 %ptradd230 = getelementptr inbounds i8, ptr %varargslots227, i64 16 store %any %121, ptr %ptradd230, align 16 - %122 = call i64 @std.io.printfn(ptr %retparam231, ptr @.str.47, i64 6, ptr %varargslots227, i64 2) + %122 = call i64 @std.io.printfn(ptr %retparam231, ptr @.str.44, i64 6, ptr %varargslots227, i64 2) ret void } - +; Function Attrs: nounwind uwtable define void @test.main() #0 { entry: %varargslots = alloca [1 x %any], align 16 @@ -759,12 +759,12 @@ entry: %0 = insertvalue %any undef, ptr %taddr, 0 %1 = insertvalue %any %0, i64 ptrtoint (ptr @"$ct.long" to i64), 1 store %any %1, ptr %varargslots, align 16 - %2 = call i64 @std.io.printfn(ptr %retparam, ptr @.str.50, i64 7, ptr %varargslots, i64 1) + %2 = call i64 @std.io.printfn(ptr %retparam, ptr @.str.47, i64 7, ptr %varargslots, i64 1) store i64 1, ptr %taddr2, align 8 %3 = insertvalue %any undef, ptr %taddr2, 0 %4 = insertvalue %any %3, i64 ptrtoint (ptr @"$ct.long" to i64), 1 store %any %4, ptr %varargslots1, align 16 - %5 = call i64 @std.io.printfn(ptr %retparam3, ptr @.str.51, i64 7, ptr %varargslots1, i64 1) + %5 = call i64 @std.io.printfn(ptr %retparam3, ptr @.str.48, i64 7, ptr %varargslots1, i64 1) store i64 0, ptr %taddr5, align 8 %6 = insertvalue %any undef, ptr %taddr5, 0 %7 = insertvalue %any %6, i64 ptrtoint (ptr @"$ct.ulong" to i64), 1 @@ -774,7 +774,7 @@ entry: %9 = insertvalue %any %8, i64 ptrtoint (ptr @"$ct.ulong" to i64), 1 %ptradd = getelementptr inbounds i8, ptr %varargslots4, i64 16 store %any %9, ptr %ptradd, align 16 - %10 = call i64 @std.io.printfn(ptr %retparam7, ptr @.str.52, i64 8, ptr %varargslots4, i64 2) + %10 = call i64 @std.io.printfn(ptr %retparam7, ptr @.str.49, i64 8, ptr %varargslots4, i64 2) store i64 2, ptr %taddr9, align 8 %11 = insertvalue %any undef, ptr %taddr9, 0 %12 = insertvalue %any %11, i64 ptrtoint (ptr @"$ct.ulong" to i64), 1 @@ -784,7 +784,7 @@ entry: %14 = insertvalue %any %13, i64 ptrtoint (ptr @"$ct.ulong" to i64), 1 %ptradd11 = getelementptr inbounds i8, ptr %varargslots8, i64 16 store %any %14, ptr %ptradd11, align 16 - %15 = call i64 @std.io.printfn(ptr %retparam12, ptr @.str.53, i64 8, ptr %varargslots8, i64 2) + %15 = call i64 @std.io.printfn(ptr %retparam12, ptr @.str.50, i64 8, ptr %varargslots8, i64 2) store i64 4, ptr %taddr14, align 8 %16 = insertvalue %any undef, ptr %taddr14, 0 %17 = insertvalue %any %16, i64 ptrtoint (ptr @"$ct.ulong" to i64), 1 @@ -794,7 +794,7 @@ entry: %19 = insertvalue %any %18, i64 ptrtoint (ptr @"$ct.ulong" to i64), 1 %ptradd16 = getelementptr inbounds i8, ptr %varargslots13, i64 16 store %any %19, ptr %ptradd16, align 16 - %20 = call i64 @std.io.printfn(ptr %retparam17, ptr @.str.54, i64 8, ptr %varargslots13, i64 2) + %20 = call i64 @std.io.printfn(ptr %retparam17, ptr @.str.51, i64 8, ptr %varargslots13, i64 2) store i64 4, ptr %taddr19, align 8 %21 = insertvalue %any undef, ptr %taddr19, 0 %22 = insertvalue %any %21, i64 ptrtoint (ptr @"$ct.ulong" to i64), 1 @@ -804,7 +804,7 @@ entry: %24 = insertvalue %any %23, i64 ptrtoint (ptr @"$ct.ulong" to i64), 1 %ptradd21 = getelementptr inbounds i8, ptr %varargslots18, i64 16 store %any %24, ptr %ptradd21, align 16 - %25 = call i64 @std.io.printfn(ptr %retparam22, ptr @.str.55, i64 8, ptr %varargslots18, i64 2) + %25 = call i64 @std.io.printfn(ptr %retparam22, ptr @.str.52, i64 8, ptr %varargslots18, i64 2) store i64 4, ptr %taddr24, align 8 %26 = insertvalue %any undef, ptr %taddr24, 0 %27 = insertvalue %any %26, i64 ptrtoint (ptr @"$ct.ulong" to i64), 1 @@ -814,7 +814,7 @@ entry: %29 = insertvalue %any %28, i64 ptrtoint (ptr @"$ct.ulong" to i64), 1 %ptradd26 = getelementptr inbounds i8, ptr %varargslots23, i64 16 store %any %29, ptr %ptradd26, align 16 - %30 = call i64 @std.io.printfn(ptr %retparam27, ptr @.str.56, i64 9, ptr %varargslots23, i64 2) + %30 = call i64 @std.io.printfn(ptr %retparam27, ptr @.str.53, i64 9, ptr %varargslots23, i64 2) store i64 5, ptr %taddr29, align 8 %31 = insertvalue %any undef, ptr %taddr29, 0 %32 = insertvalue %any %31, i64 ptrtoint (ptr @"$ct.ulong" to i64), 1 @@ -824,7 +824,7 @@ entry: %34 = insertvalue %any %33, i64 ptrtoint (ptr @"$ct.ulong" to i64), 1 %ptradd31 = getelementptr inbounds i8, ptr %varargslots28, i64 16 store %any %34, ptr %ptradd31, align 16 - %35 = call i64 @std.io.printfn(ptr %retparam32, ptr @.str.57, i64 9, ptr %varargslots28, i64 2) + %35 = call i64 @std.io.printfn(ptr %retparam32, ptr @.str.54, i64 9, ptr %varargslots28, i64 2) store i64 8, ptr %taddr34, align 8 %36 = insertvalue %any undef, ptr %taddr34, 0 %37 = insertvalue %any %36, i64 ptrtoint (ptr @"$ct.ulong" to i64), 1 @@ -834,12 +834,12 @@ entry: %39 = insertvalue %any %38, i64 ptrtoint (ptr @"$ct.ulong" to i64), 1 %ptradd36 = getelementptr inbounds i8, ptr %varargslots33, i64 16 store %any %39, ptr %ptradd36, align 16 - %40 = call i64 @std.io.printfn(ptr %retparam37, ptr @.str.58, i64 10, ptr %varargslots33, i64 2) + %40 = call i64 @std.io.printfn(ptr %retparam37, ptr @.str.55, i64 10, ptr %varargslots33, i64 2) store i64 4, ptr %taddr39, align 8 %41 = insertvalue %any undef, ptr %taddr39, 0 %42 = insertvalue %any %41, i64 ptrtoint (ptr @"$ct.ulong" to i64), 1 store %any %42, ptr %varargslots38, align 16 - %43 = call i64 @std.io.printfn(ptr %retparam40, ptr @.str.59, i64 7, ptr %varargslots38, i64 1) + %43 = call i64 @std.io.printfn(ptr %retparam40, ptr @.str.56, i64 7, ptr %varargslots38, i64 1) store i64 8, ptr %taddr42, align 8 %44 = insertvalue %any undef, ptr %taddr42, 0 %45 = insertvalue %any %44, i64 ptrtoint (ptr @"$ct.ulong" to i64), 1 @@ -849,7 +849,7 @@ entry: %47 = insertvalue %any %46, i64 ptrtoint (ptr @"$ct.ulong" to i64), 1 %ptradd44 = getelementptr inbounds i8, ptr %varargslots41, i64 16 store %any %47, ptr %ptradd44, align 16 - %48 = call i64 @std.io.printfn(ptr %retparam45, ptr @.str.60, i64 10, ptr %varargslots41, i64 2) + %48 = call i64 @std.io.printfn(ptr %retparam45, ptr @.str.57, i64 10, ptr %varargslots41, i64 2) call void @test.test(i32 10) ret void } diff --git a/test/test_suite/expressions/pointer_access.c3t b/test/test_suite/expressions/pointer_access.c3t index 27f3746cb..22f098b06 100644 --- a/test/test_suite/expressions/pointer_access.c3t +++ b/test/test_suite/expressions/pointer_access.c3t @@ -42,9 +42,9 @@ fn void testSimple() %.anon = type { i32, i32 } %.anon.0 = type { double } -@"$ct.pointer_access.c" = linkonce global %.introspect { i8 10, i64 0, ptr null, i64 40, i64 0, i64 5, [0 x i64] zeroinitializer }, align 8 -@"$ct.pointer_access.$anon" = linkonce global %.introspect { i8 10, i64 0, ptr null, i64 8, i64 0, i64 2, [0 x i64] zeroinitializer }, align 8 -@"$ct.pointer_access.$anon.4" = linkonce global %.introspect { i8 11, i64 0, ptr null, i64 8, i64 0, i64 2, [0 x i64] zeroinitializer }, align 8 +@"$ct.pointer_access.ExtraSimple.c" = linkonce global %.introspect { i8 10, i64 0, ptr null, i64 40, i64 0, i64 5, [0 x i64] zeroinitializer }, align 8 +@"$ct.pointer_access.ExtraSimple.$anon" = linkonce global %.introspect { i8 10, i64 0, ptr null, i64 8, i64 0, i64 2, [0 x i64] zeroinitializer }, align 8 +@"$ct.pointer_access.ExtraSimple.$anon.4" = linkonce global %.introspect { i8 11, i64 0, ptr null, i64 8, i64 0, i64 2, [0 x i64] zeroinitializer }, align 8 @"$ct.pointer_access.ExtraSimple" = linkonce global %.introspect { i8 10, i64 0, ptr null, i64 72, i64 0, i64 6, [0 x i64] zeroinitializer }, align 8 @.str = private unnamed_addr constant [71 x i8] c"a = %d, c.e = %f, c.f = %f, c.j = %f, g = %d, o0 = %f, r = %d, s = %d\0A\00", align 1 diff --git a/test/test_suite/struct/nested_struct_init.c3t b/test/test_suite/struct/nested_struct_init.c3t index c67162466..5024402b0 100644 --- a/test/test_suite/struct/nested_struct_init.c3t +++ b/test/test_suite/struct/nested_struct_init.c3t @@ -38,23 +38,22 @@ fn void main() %Matrix2x2_b = type { %.anon.1 } %.anon.1 = type { [4 x float] } -@"$ct.foo.$anon" = linkonce global %.introspect { i8 10, i64 0, ptr null, i64 16, i64 0, i64 4, [0 x i64] zeroinitializer }, align 8 -@"$ct.foo.$anon.3" = linkonce global %.introspect { i8 11, i64 0, ptr null, i64 16, i64 0, i64 2, [0 x i64] zeroinitializer }, align 8 +@"$ct.foo.Matrix2x2.$anon.$anon" = linkonce global %.introspect { i8 10, i64 0, ptr null, i64 16, i64 0, i64 4, [0 x i64] zeroinitializer }, align 8 +@"$ct.foo.Matrix2x2.$anon" = linkonce global %.introspect { i8 11, i64 0, ptr null, i64 16, i64 0, i64 2, [0 x i64] zeroinitializer }, align 8 @"$ct.foo.Matrix2x2" = linkonce global %.introspect { i8 10, i64 0, ptr null, i64 16, i64 0, i64 1, [0 x i64] zeroinitializer }, align 8 -@"$ct.foo.$anon.6" = linkonce global %.introspect { i8 10, i64 0, ptr null, i64 16, i64 0, i64 4, [0 x i64] zeroinitializer }, align 8 -@"$ct.foo.$anon.7" = linkonce global %.introspect { i8 11, i64 0, ptr null, i64 16, i64 0, i64 2, [0 x i64] zeroinitializer }, align 8 +@"$ct.foo.Matrix2x2_b.$anon.$anon" = linkonce global %.introspect { i8 10, i64 0, ptr null, i64 16, i64 0, i64 4, [0 x i64] zeroinitializer }, align 8 +@"$ct.foo.Matrix2x2_b.$anon" = linkonce global %.introspect { i8 11, i64 0, ptr null, i64 16, i64 0, i64 2, [0 x i64] zeroinitializer }, align 8 @"$ct.foo.Matrix2x2_b" = linkonce global %.introspect { i8 10, i64 0, ptr null, i64 16, i64 0, i64 1, [0 x i64] zeroinitializer }, align 8 @.__const = private unnamed_addr constant %Matrix2x2 { %.anon { %.anon.0 { float 1.000000e+00, float 2.000000e+00, float 3.000000e+00, float 4.000000e+00 } } }, align 4 -@.__const.8 = private unnamed_addr constant %Matrix2x2_b { %.anon.1 { [4 x float] [float 1.000000e+00, float 2.000000e+00, float 3.000000e+00, float 4.000000e+00] } }, align 4 +@.__const.5 = private unnamed_addr constant %Matrix2x2_b { %.anon.1 { [4 x float] [float 1.000000e+00, float 2.000000e+00, float 3.000000e+00, float 4.000000e+00] } }, align 4 @.str = private unnamed_addr constant [13 x i8] c"%f %f %f %f\0A\00", align 1 -; Function Attrs: define void @foo.main() #0 { entry: %m = alloca %Matrix2x2, align 4 %m2 = alloca %Matrix2x2_b, align 4 call void @llvm.memcpy.p0.p0.i32(ptr align 4 %m, ptr align 4 @.__const, i32 16, i1 false) - call void @llvm.memcpy.p0.p0.i32(ptr align 4 %m2, ptr align 4 @.__const.8, i32 16, i1 false) + call void @llvm.memcpy.p0.p0.i32(ptr align 4 %m2, ptr align 4 @.__const.5, i32 16, i1 false) %0 = load float, ptr %m, align 4 %fpfpext = fpext float %0 to double %ptradd = getelementptr inbounds i8, ptr %m, i64 4 diff --git a/test/test_suite/struct/nested_struct_union_init.c3t b/test/test_suite/struct/nested_struct_union_init.c3t index 5be6af01b..4c46007f5 100644 --- a/test/test_suite/struct/nested_struct_union_init.c3t +++ b/test/test_suite/struct/nested_struct_union_init.c3t @@ -93,7 +93,7 @@ entry: %ptradd7 = getelementptr inbounds i8, ptr %x, i64 32 store float 9.000000e+00, ptr %ptradd7, align 4 call void @llvm.memcpy.p0.p0.i32(ptr align 4 %m, ptr align 4 @.__const, i32 16, i1 false) - call void @llvm.memcpy.p0.p0.i32(ptr align 4 %m2, ptr align 4 @.__const.16, i32 16, i1 false) + call void @llvm.memcpy.p0.p0.i32(ptr align 4 %m2, ptr align 4 @.__const.9, i32 16, i1 false) %0 = load float, ptr %x, align 4 %fpfpext = fpext float %0 to double %ptradd8 = getelementptr inbounds i8, ptr %x, i64 4 diff --git a/test/test_suite/visibility/export_property.c3t b/test/test_suite/visibility/export_property.c3t index d47e4a0fd..d9bdcc811 100644 --- a/test/test_suite/visibility/export_property.c3t +++ b/test/test_suite/visibility/export_property.c3t @@ -31,7 +31,7 @@ struct Test %Test = type { %.anon, i32, i32, [0 x i32] } %.anon = type { i32, i32 } -@"$ct.test.$anon" = linkonce global %.introspect { i8 10, i64 0, ptr null, i64 8, i64 0, i64 2, [0 x i64] zeroinitializer }, align 8 +@"$ct.test.Test.$anon" = linkonce global %.introspect { i8 10, i64 0, ptr null, i64 8, i64 0, i64 2, [0 x i64] zeroinitializer }, align 8 @"$ct.test.Test" = linkonce global %.introspect { i8 10, i64 0, ptr null, i64 16, i64 0, i64 4, [0 x i64] zeroinitializer }, align 8 @.enum.ABC = internal constant [4 x i8] c"ABC\00", align 1 @.enum.DEF = internal constant [4 x i8] c"DEF\00", align 1