Fixed duplicate decl detection for typedefs/enums
This commit is contained in:
parent
df89291d1c
commit
b3b4786c24
@ -485,8 +485,13 @@ static void construct_linker_job_coff(LinkJob *lj) {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (link_lib->provided_explicitly) {
|
if (link_lib->provided_explicitly) {
|
||||||
Buf *arg = buf_sprintf("-l%s", buf_ptr(link_lib->name));
|
if (lj->codegen->zig_target.env_type == ZigLLVM_GNU) {
|
||||||
lj->args.append(buf_ptr(arg));
|
Buf *arg = buf_sprintf("-l%s", buf_ptr(link_lib->name));
|
||||||
|
lj->args.append(buf_ptr(arg));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
lj->args.append(buf_ptr(link_lib->name));
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
buf_resize(def_contents, 0);
|
buf_resize(def_contents, 0);
|
||||||
buf_appendf(def_contents, "LIBRARY %s\nEXPORTS\n", buf_ptr(link_lib->name));
|
buf_appendf(def_contents, "LIBRARY %s\nEXPORTS\n", buf_ptr(link_lib->name));
|
||||||
|
@ -2572,11 +2572,10 @@ static AstNode *resolve_typdef_as_builtin(Context *c, const TypedefNameDecl *typ
|
|||||||
}
|
}
|
||||||
|
|
||||||
static AstNode *resolve_typedef_decl(Context *c, const TypedefNameDecl *typedef_decl) {
|
static AstNode *resolve_typedef_decl(Context *c, const TypedefNameDecl *typedef_decl) {
|
||||||
auto existing_entry = c->decl_table.maybe_get((void*)typedef_decl);
|
auto existing_entry = c->decl_table.maybe_get((void*)typedef_decl->getCanonicalDecl());
|
||||||
if (existing_entry) {
|
if (existing_entry) {
|
||||||
return existing_entry->value;
|
return existing_entry->value;
|
||||||
}
|
}
|
||||||
|
|
||||||
QualType child_qt = typedef_decl->getUnderlyingType();
|
QualType child_qt = typedef_decl->getUnderlyingType();
|
||||||
Buf *type_name = buf_create_from_str(decl_name(typedef_decl));
|
Buf *type_name = buf_create_from_str(decl_name(typedef_decl));
|
||||||
|
|
||||||
@ -2619,7 +2618,7 @@ static AstNode *resolve_typedef_decl(Context *c, const TypedefNameDecl *typedef_
|
|||||||
add_global_var(c, type_name, type_node);
|
add_global_var(c, type_name, type_node);
|
||||||
|
|
||||||
AstNode *symbol_node = trans_create_node_symbol(c, type_name);
|
AstNode *symbol_node = trans_create_node_symbol(c, type_name);
|
||||||
c->decl_table.put(typedef_decl, symbol_node);
|
c->decl_table.put(typedef_decl->getCanonicalDecl(), symbol_node);
|
||||||
return symbol_node;
|
return symbol_node;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2745,6 +2744,7 @@ static AstNode *resolve_enum_decl(Context *c, const EnumDecl *enum_decl) {
|
|||||||
AstNode *symbol_node = trans_create_node_symbol(c, full_type_name);
|
AstNode *symbol_node = trans_create_node_symbol(c, full_type_name);
|
||||||
add_global_weak_alias(c, bare_name, full_type_name);
|
add_global_weak_alias(c, bare_name, full_type_name);
|
||||||
add_global_var(c, full_type_name, enum_node);
|
add_global_var(c, full_type_name, enum_node);
|
||||||
|
c->decl_table.put(enum_decl->getCanonicalDecl(), symbol_node);
|
||||||
return symbol_node;
|
return symbol_node;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user