| ... | @@ -643,20 +643,20 @@ const Stage2TargetDetails = struct { | ... | @@ -643,20 +643,20 @@ const Stage2TargetDetails = struct { |
| 643 | var builtin_str_buffer = try std.Buffer.init( | 643 | var builtin_str_buffer = try std.Buffer.init( |
| 644 | allocator, | 644 | allocator, |
| 645 | "@import(\"std\").target.TargetDetails{.cpu=&@import(\"std\").target."); | 645 | "@import(\"std\").target.TargetDetails{.cpu=&@import(\"std\").target."); |
| 646 | defer builtin_str_buffer.deinit(); | | |
| 647 | | 646 | |
| 648 | try builtin_str_buffer.append(@tagName(arch)); | 647 | try builtin_str_buffer.append(@tagName(arch)); |
| 649 | try builtin_str_buffer.append(".cpu_"); | 648 | try builtin_str_buffer.append(".cpu_"); |
| 650 | try builtin_str_buffer.append(cpu.name); | 649 | try builtin_str_buffer.append(cpu.name); |
| 651 | try builtin_str_buffer.append("};"); | 650 | try builtin_str_buffer.append("};"); |
| | 651 | |
| 652 | return Self{ | 652 | return Self{ |
| 653 | .allocator = allocator, | 653 | .allocator = allocator, |
| 654 | .target_details = .{ | 654 | .target_details = .{ |
| 655 | .cpu = cpu, | 655 | .cpu = cpu, |
| 656 | }, | 656 | }, |
| 657 | .llvm_cpu_str = try toNullTerminatedStringAlloc(allocator, cpu.name), | 657 | .llvm_cpu_str = try toNullTerminatedStringAlloc(allocator, cpu.llvm_name), |
| 658 | .llvm_features_str = null_terminated_empty_string, | 658 | .llvm_features_str = null_terminated_empty_string, |
| 659 | .builtin_str = builtin_str_buffer.toOwnedSlice(), | 659 | .builtin_str = builtin_str_buffer.toSliceConst(), |
| 660 | }; | 660 | }; |
| 661 | } | 661 | } |
| 662 | | 662 | |
| ... | @@ -664,10 +664,8 @@ const Stage2TargetDetails = struct { | ... | @@ -664,10 +664,8 @@ const Stage2TargetDetails = struct { |
| 664 | var builtin_str_buffer = try std.Buffer.init( | 664 | var builtin_str_buffer = try std.Buffer.init( |
| 665 | allocator, | 665 | allocator, |
| 666 | "@import(\"std\").target.TargetDetails{.features=&[_]*const @import(\"std\").target.Feature{\n"); | 666 | "@import(\"std\").target.TargetDetails{.features=&[_]*const @import(\"std\").target.Feature{\n"); |
| 667 | defer builtin_str_buffer.deinit(); | | |
| 668 | | 667 | |
| 669 | var llvm_features_buffer = try std.Buffer.initSize(allocator, 0); | 668 | var llvm_features_buffer = try std.Buffer.initSize(allocator, 0); |
| 670 | defer llvm_features_buffer.deinit(); | | |
| 671 | | 669 | |
| 672 | // First, disable all features. | 670 | // First, disable all features. |
| 673 | // This way, we only get the ones the user requests. | 671 | // This way, we only get the ones the user requests. |
| ... | @@ -691,17 +689,14 @@ const Stage2TargetDetails = struct { | ... | @@ -691,17 +689,14 @@ const Stage2TargetDetails = struct { |
| 691 | | 689 | |
| 692 | try builtin_str_buffer.append("}};"); | 690 | try builtin_str_buffer.append("}};"); |
| 693 | | 691 | |
| 694 | // This is needed here because llvm_features_buffer.len() is no longer valid after toOwnedSlice(). | | |
| 695 | const llvm_features_buffer_len = llvm_features_buffer.len(); | | |
| 696 | | | |
| 697 | return Self{ | 692 | return Self{ |
| 698 | .allocator = allocator, | 693 | .allocator = allocator, |
| 699 | .target_details = std.target.TargetDetails{ | 694 | .target_details = std.target.TargetDetails{ |
| 700 | .features = features, | 695 | .features = features, |
| 701 | }, | 696 | }, |
| 702 | .llvm_cpu_str = null_terminated_empty_string, | 697 | .llvm_cpu_str = null_terminated_empty_string, |
| 703 | .llvm_features_str = llvm_features_buffer.toOwnedSlice()[0..llvm_features_buffer_len :0], | 698 | .llvm_features_str = llvm_features_buffer.toSliceConst(), |
| 704 | .builtin_str = builtin_str_buffer.toOwnedSlice(), | 699 | .builtin_str = builtin_str_buffer.toSliceConst(), |
| 705 | }; | 700 | }; |
| 706 | } | 701 | } |
| 707 | }; | 702 | }; |