authorgravatar for ryan.saunderson88@gmail.comdimenus <ryan.saunderson88@gmail.com> 2017-11-13 16:37:46-06:00
committergravatar for ryan.saunderson88@gmail.comRyan Saunderson <ryan.saunderson88@gmail.com> 2017-11-13 20:10:36-06:00
logb3b4786c245d7e49241ab65a56af0e4ac83d080b
tree61dc9f6cb9ab3cac21e4d6997ba2e978173ad11c
parentdf89291d1ca04a5891dd48ea5f6d1a99b6006bcb

Fixed duplicate decl detection for typedefs/enums


2 files changed, 10 insertions(+), 5 deletions(-)

src/link.cpp+7-2
...@@ -485,8 +485,13 @@ static void construct_linker_job_coff(LinkJob *lj) {...@@ -485,8 +485,13 @@ static void construct_linker_job_coff(LinkJob *lj) {
485 continue;485 continue;
486 }486 }
487 if (link_lib->provided_explicitly) {487 if (link_lib->provided_explicitly) {
488 Buf *arg = buf_sprintf("-l%s", buf_ptr(link_lib->name));488 if (lj->codegen->zig_target.env_type == ZigLLVM_GNU) {
489 lj->args.append(buf_ptr(arg));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 }
490 } else {495 } else {
491 buf_resize(def_contents, 0);496 buf_resize(def_contents, 0);
492 buf_appendf(def_contents, "LIBRARY %s\nEXPORTS\n", buf_ptr(link_lib->name));497 buf_appendf(def_contents, "LIBRARY %s\nEXPORTS\n", buf_ptr(link_lib->name));
src/parsec.cpp+3-3
...@@ -2572,11 +2572,10 @@ static AstNode *resolve_typdef_as_builtin(Context *c, const TypedefNameDecl *typ...@@ -2572,11 +2572,10 @@ static AstNode *resolve_typdef_as_builtin(Context *c, const TypedefNameDecl *typ
2572}2572}
25732573
2574static AstNode *resolve_typedef_decl(Context *c, const TypedefNameDecl *typedef_decl) {2574static AstNode *resolve_typedef_decl(Context *c, const TypedefNameDecl *typedef_decl) {
2575 auto existing_entry = c->decl_table.maybe_get((void*)typedef_decl);2575 auto existing_entry = c->decl_table.maybe_get((void*)typedef_decl->getCanonicalDecl());
2576 if (existing_entry) {2576 if (existing_entry) {
2577 return existing_entry->value;2577 return existing_entry->value;
2578 }2578 }
2579
2580 QualType child_qt = typedef_decl->getUnderlyingType();2579 QualType child_qt = typedef_decl->getUnderlyingType();
2581 Buf *type_name = buf_create_from_str(decl_name(typedef_decl));2580 Buf *type_name = buf_create_from_str(decl_name(typedef_decl));
25822581
...@@ -2619,7 +2618,7 @@ static AstNode *resolve_typedef_decl(Context *c, const TypedefNameDecl *typedef_...@@ -2619,7 +2618,7 @@ static AstNode *resolve_typedef_decl(Context *c, const TypedefNameDecl *typedef_
2619 add_global_var(c, type_name, type_node);2618 add_global_var(c, type_name, type_node);
26202619
2621 AstNode *symbol_node = trans_create_node_symbol(c, type_name);2620 AstNode *symbol_node = trans_create_node_symbol(c, type_name);
2622 c->decl_table.put(typedef_decl, symbol_node);2621 c->decl_table.put(typedef_decl->getCanonicalDecl(), symbol_node);
2623 return symbol_node;2622 return symbol_node;
2624}2623}
26252624
...@@ -2745,6 +2744,7 @@ static AstNode *resolve_enum_decl(Context *c, const EnumDecl *enum_decl) {...@@ -2745,6 +2744,7 @@ static AstNode *resolve_enum_decl(Context *c, const EnumDecl *enum_decl) {
2745 AstNode *symbol_node = trans_create_node_symbol(c, full_type_name);2744 AstNode *symbol_node = trans_create_node_symbol(c, full_type_name);
2746 add_global_weak_alias(c, bare_name, full_type_name);2745 add_global_weak_alias(c, bare_name, full_type_name);
2747 add_global_var(c, full_type_name, enum_node);2746 add_global_var(c, full_type_name, enum_node);
2747 c->decl_table.put(enum_decl->getCanonicalDecl(), symbol_node);
2748 return symbol_node;2748 return symbol_node;
2749 }2749 }
2750}2750}