authorgravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2022-09-23 17:09:21+03:00
committergravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2022-09-24 14:43:03+03:00
logfdf4c875ffbbeb24f844718d9eb92bac38e7147e
treedec80b3abbf3d39eb0dda7683d7edd37827c52f0
parent3525b8778edd235d8d0ad2b55eee83eacd33d5cf

llvm: avoid crash on duplicate asm input/output name


1 files changed, 6 insertions(+), 2 deletions(-)

src/codegen/llvm.zig+6-2
...@@ -5972,7 +5972,9 @@ pub const FuncGen = struct {...@@ -5972,7 +5972,9 @@ pub const FuncGen = struct {
5972 }5972 }
59735973
5974 if (!std.mem.eql(u8, name, "_")) {5974 if (!std.mem.eql(u8, name, "_")) {
5975 name_map.putAssumeCapacityNoClobber(name, total_i);5975 const gop = name_map.getOrPutAssumeCapacity(name);
5976 if (gop.found_existing) return self.todo("duplicate asm output name '{s}'", .{name});
5977 gop.value_ptr.* = total_i;
5976 }5978 }
5977 total_i += 1;5979 total_i += 1;
5978 }5980 }
...@@ -6028,7 +6030,9 @@ pub const FuncGen = struct {...@@ -6028,7 +6030,9 @@ pub const FuncGen = struct {
6028 }6030 }
60296031
6030 if (!std.mem.eql(u8, name, "_")) {6032 if (!std.mem.eql(u8, name, "_")) {
6031 name_map.putAssumeCapacityNoClobber(name, total_i);6033 const gop = name_map.getOrPutAssumeCapacity(name);
6034 if (gop.found_existing) return self.todo("duplicate asm input name '{s}'", .{name});
6035 gop.value_ptr.* = total_i;
6032 }6036 }
60336037
6034 // In the case of indirect inputs, LLVM requires the callsite to have6038 // In the case of indirect inputs, LLVM requires the callsite to have