mirror of
https://github.com/ziglang/zig.git
synced 2026-02-12 20:37:54 +00:00
Compilation: fix regression in addCCArgs
`-fno-sanitize=function` must come after `-fsanitize=undefined` or it has no effect.
This commit is contained in:
parent
ae09f9bbce
commit
1cb994899d
@ -5626,15 +5626,6 @@ pub fn addCCArgs(
|
||||
if (mod.sanitize_c) {
|
||||
if (san_arg.items.len == 0) try san_arg.appendSlice(arena, prefix);
|
||||
try san_arg.appendSlice(arena, "undefined,");
|
||||
try argv.append("-fsanitize-trap=undefined");
|
||||
// It is very common, and well-defined, for a pointer on one side of a C ABI
|
||||
// to have a different but compatible element type. Examples include:
|
||||
// `char*` vs `uint8_t*` on a system with 8-bit bytes
|
||||
// `const char*` vs `char*`
|
||||
// `char*` vs `unsigned char*`
|
||||
// Without this flag, Clang would invoke UBSAN when such an extern
|
||||
// function was called.
|
||||
try argv.append("-fno-sanitize=function");
|
||||
}
|
||||
if (mod.sanitize_thread) {
|
||||
if (san_arg.items.len == 0) try san_arg.appendSlice(arena, prefix);
|
||||
@ -5645,7 +5636,23 @@ pub fn addCCArgs(
|
||||
try san_arg.appendSlice(arena, "fuzzer-no-link,");
|
||||
}
|
||||
// Chop off the trailing comma and append to argv.
|
||||
if (san_arg.popOrNull()) |_| try argv.append(san_arg.items);
|
||||
if (san_arg.popOrNull()) |_| {
|
||||
try argv.append(san_arg.items);
|
||||
|
||||
// These args have to be added after the `-fsanitize` arg or
|
||||
// they won't take effect.
|
||||
if (mod.sanitize_c) {
|
||||
try argv.append("-fsanitize-trap=undefined");
|
||||
// It is very common, and well-defined, for a pointer on one side of a C ABI
|
||||
// to have a different but compatible element type. Examples include:
|
||||
// `char*` vs `uint8_t*` on a system with 8-bit bytes
|
||||
// `const char*` vs `char*`
|
||||
// `char*` vs `unsigned char*`
|
||||
// Without this flag, Clang would invoke UBSAN when such an extern
|
||||
// function was called.
|
||||
try argv.append("-fno-sanitize=function");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (mod.red_zone) {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user