Fix when memcmp is defined.

This commit is contained in:
Christoffer Lerno
2024-07-14 16:51:38 +02:00
parent dfb8a1b8cb
commit 68fb916195
4 changed files with 13 additions and 3 deletions

View File

@@ -1955,6 +1955,7 @@ extern const char *kw_inout;
extern const char *kw_len;
extern const char *kw_main;
extern const char *kw_mainstub;
extern const char *kw_memcmp;
extern const char *kw_nameof;
extern const char *kw_offsetof;
extern const char *kw_ordinal;

View File

@@ -1213,7 +1213,14 @@ LLVMValueRef llvm_get_ref(GenContext *c, Decl *decl)
}
LLVMTypeRef type = llvm_get_type(c, decl->type);
scratch_buffer_set_extern_decl_name(decl, true);
if (decl->name == kw_memcmp && c->memcmp_function)
{
backend_ref = decl->backend_ref = c->memcmp_function;
}
else
{
backend_ref = decl->backend_ref = LLVMAddFunction(c->module, scratch_buffer_to_string(), type);
}
llvm_append_function_attributes(c, decl);
if (decl->is_export && platform_target.os == OS_TYPE_WIN32 && !active_target.win.def && decl->name != kw_main && decl->name != kw_mainstub)
{

View File

@@ -3691,10 +3691,10 @@ static inline void llvm_emit_memcmp(GenContext *c, BEValue *be_value, LLVMValueR
{
if (!c->memcmp_function)
{
c->memcmp_function = LLVMGetNamedFunction(c->module, "memcmp");
c->memcmp_function = LLVMGetNamedFunction(c->module, kw_memcmp);
if (!c->memcmp_function)
{
c->memcmp_function = LLVMAddFunction(c->module, "memcmp", c->memcmp_function_type);
c->memcmp_function = LLVMAddFunction(c->module, kw_memcmp, c->memcmp_function_type);
}
}
LLVMValueRef args[3] = { ptr, other_ptr, size };

View File

@@ -51,6 +51,7 @@ const char *kw_in;
const char *kw_inout;
const char *kw_len;
const char *kw_main;
const char *kw_memcmp;
const char *kw_mainstub;
const char *kw_nameof;
const char *kw_offsetof;
@@ -135,6 +136,7 @@ void symtab_init(uint32_t capacity)
kw_inout = KW_DEF("inout");
kw_mainstub = KW_DEF("_$main");
kw_main = KW_DEF("main");
kw_memcmp = KW_DEF("memcmp");
kw_nameof = KW_DEF("nameof");
kw_offsetof = KW_DEF("offsetof");
kw_ordinal = KW_DEF("ordinal");