Fix C assert calls for newlib (#4351)

This commit is contained in:
Hiroki Noda 2023-04-13 22:42:41 +09:00 committed by GitHub
parent 25dc3fc6eb
commit d001a7cdb8
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 23 additions and 0 deletions

View file

@ -364,6 +364,8 @@ llvm::Function *getRuntimeFunction(const Loc &loc, llvm::Module &target,
// const char *funcname);
// uClibc: void __assert(const char *assertion, const char *filename, int linenumber,
// const char *function);
// newlib: void __assert_func(const char *file, int line, const char *func,
// const char *failedexpr)
// else: void __assert(const char *msg, const char *file, unsigned line)
static const char *getCAssertFunctionName() {
@ -376,6 +378,8 @@ static const char *getCAssertFunctionName() {
return "__assert_c99";
} else if (triple.isMusl()) {
return "__assert_fail";
} else if (global.params.isNewlibEnvironment) {
return "__assert_func";
}
return "__assert";
}
@ -392,6 +396,9 @@ static std::vector<PotentiallyLazyType> getCAssertFunctionParamTypes() {
if (triple.getEnvironment() == llvm::Triple::Android) {
return {voidPtr, uint, voidPtr};
}
if (global.params.isNewlibEnvironment) {
return {voidPtr, uint, voidPtr, voidPtr};
}
return {voidPtr, voidPtr, uint};
}