Skip to content

Commit 98e3c79

Browse files
Fixed duplicate decl detection for typedefs/enums
1 parent a890380 commit 98e3c79

File tree

2 files changed

+10
-5
lines changed

2 files changed

+10
-5
lines changed

src/link.cpp

+7-2
Original file line numberDiff line numberDiff line change
@@ -485,8 +485,13 @@ static void construct_linker_job_coff(LinkJob *lj) {
485485
continue;
486486
}
487487
if (link_lib->provided_explicitly) {
488-
Buf *arg = buf_sprintf("-l%s", buf_ptr(link_lib->name));
489-
lj->args.append(buf_ptr(arg));
488+
if (lj->codegen->zig_target.env_type == ZigLLVM_GNU) {
489+
Buf *arg = buf_sprintf("-l%s", buf_ptr(link_lib->name));
490+
lj->args.append(buf_ptr(arg));
491+
}
492+
else {
493+
lj->args.append(buf_ptr(link_lib->name));
494+
}
490495
} else {
491496
buf_resize(def_contents, 0);
492497
buf_appendf(def_contents, "LIBRARY %s\nEXPORTS\n", buf_ptr(link_lib->name));

src/parsec.cpp

+3-3
Original file line numberDiff line numberDiff line change
@@ -2569,11 +2569,10 @@ static AstNode *resolve_typdef_as_builtin(Context *c, const TypedefNameDecl *typ
25692569
}
25702570

25712571
static AstNode *resolve_typedef_decl(Context *c, const TypedefNameDecl *typedef_decl) {
2572-
auto existing_entry = c->decl_table.maybe_get((void*)typedef_decl);
2572+
auto existing_entry = c->decl_table.maybe_get((void*)typedef_decl->getCanonicalDecl());
25732573
if (existing_entry) {
25742574
return existing_entry->value;
25752575
}
2576-
25772576
QualType child_qt = typedef_decl->getUnderlyingType();
25782577
Buf *type_name = buf_create_from_str(decl_name(typedef_decl));
25792578

@@ -2616,7 +2615,7 @@ static AstNode *resolve_typedef_decl(Context *c, const TypedefNameDecl *typedef_
26162615
add_global_var(c, type_name, type_node);
26172616

26182617
AstNode *symbol_node = trans_create_node_symbol(c, type_name);
2619-
c->decl_table.put(typedef_decl, symbol_node);
2618+
c->decl_table.put(typedef_decl->getCanonicalDecl(), symbol_node);
26202619
return symbol_node;
26212620
}
26222621

@@ -2742,6 +2741,7 @@ static AstNode *resolve_enum_decl(Context *c, const EnumDecl *enum_decl) {
27422741
AstNode *symbol_node = trans_create_node_symbol(c, full_type_name);
27432742
add_global_weak_alias(c, bare_name, full_type_name);
27442743
add_global_var(c, full_type_name, enum_node);
2744+
c->decl_table.put(enum_decl->getCanonicalDecl(), symbol_node);
27452745
return symbol_node;
27462746
}
27472747
}

0 commit comments

Comments
 (0)