Skip to content

Commit 3c7b715

Browse files
Merge remote-tracking branch 'origin/trunk' into macros_floats_support
2 parents f8f764f + 315b0ac commit 3c7b715

File tree

301 files changed

+3548
-7458
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

301 files changed

+3548
-7458
lines changed

MODULE.bazel

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,7 @@ http_archive(
116116
"@carbon//bazel/llvm_project:0001_Patch_for_mallinfo2_when_using_Bazel_build_system.patch",
117117
"@carbon//bazel/llvm_project:0002_Added_Bazel_build_for_compiler_rt_fuzzer.patch",
118118
"@carbon//bazel/llvm_project:0003_Comment_out_unloaded_proto_library_dependencies.patch",
119+
"@carbon//bazel/llvm_project:0004_Introduce_basic_sources_exporting_for_libunwind.patch",
119120
],
120121
strip_prefix = "llvm-project-{0}".format(llvm_project_version),
121122
urls = ["https://github.com/llvm/llvm-project/archive/{0}.tar.gz".format(llvm_project_version)],
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
Commit ID: a79f1facf56cc5772557cdb09d811aa11a22e43b
2+
Change ID: sxspxmonsuvqzuvxvrvorlumwpwromsv
3+
Author : Chandler Carruth <[email protected]> (2025-09-25 22:55:26)
4+
Committer: Chandler Carruth <[email protected]> (2025-11-17 09:59:25)
5+
6+
Introduce basic sources exporting for libunwind
7+
8+
This exports the source files directly so that they can be used to build
9+
this runtime library on demand.
10+
11+
diff --git a/utils/bazel/llvm-project-overlay/libunwind/BUILD.bazel b/utils/bazel/llvm-project-overlay/libunwind/BUILD.bazel
12+
index c9fdc819c0..7d734c5a06 100644
13+
--- a/utils/bazel/llvm-project-overlay/libunwind/BUILD.bazel
14+
+++ b/utils/bazel/llvm-project-overlay/libunwind/BUILD.bazel
15+
@@ -21,3 +21,19 @@
16+
],
17+
strip_include_prefix = "include",
18+
)
19+
+
20+
+filegroup(
21+
+ name = "libunwind_hdrs",
22+
+ srcs = glob(["include/**/*.h"]),
23+
+)
24+
+
25+
+filegroup(
26+
+ name = "libunwind_srcs",
27+
+ srcs = glob([
28+
+ "src/*.cpp",
29+
+ "src/*.hpp",
30+
+ "src/*.c",
31+
+ "src/*.h",
32+
+ "src/*.S",
33+
+ ]),
34+
+)

common/command_line.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -813,7 +813,7 @@ auto OneOfArgBuilder::OneOfImpl(const OneOfValueT<U> (&input_values)[N],
813813
new (&arg()->value_action) Arg::ValueActionT(
814814
[values, match](const Arg& arg, llvm::StringRef value_string) -> bool {
815815
for (auto [value, arg_value_string] :
816-
llvm::zip(values, arg.value_strings)) {
816+
llvm::zip_equal(values, arg.value_strings)) {
817817
if (value_string == arg_value_string) {
818818
match(value);
819819
return true;

examples/advent2024/day10_part1.carbon

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ class Reachable {
3838
return var;
3939
}
4040

41-
fn AddLevel[addr self: Self*](terrain: Terrain, level: i32) {
41+
fn AddLevel[ref self: Self](terrain: Terrain, level: i32) {
4242
let adj: array((i32, i32), 4) = ((-1, 0), (0, -1), (1, 0), (0, 1));
4343
for (y: i32 in Core.Range(43)) {
4444
for (x: i32 in Core.Range(43)) {
@@ -51,11 +51,11 @@ class Reachable {
5151
if (adj_x >= 0 and adj_x < 43 and
5252
adj_y >= 0 and adj_y < 43 and
5353
terrain.height[adj_x][adj_y] == level - 1) {
54-
reach = reach | self->trailheads[adj_x][adj_y];
54+
reach = reach | self.trailheads[adj_x][adj_y];
5555
}
5656
++i;
5757
}
58-
self->trailheads[x][y] = reach;
58+
self.trailheads[x][y] = reach;
5959
}
6060
}
6161
}

examples/advent2024/day10_part2.carbon

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ class PathsToTop {
2323
return var;
2424
}
2525

26-
fn AddLevel[addr self: Self*](terrain: Terrain, level: i32) -> i64 {
26+
fn AddLevel[ref self: Self](terrain: Terrain, level: i32) -> i64 {
2727
var total: i64 = 0;
2828
let adj: array((i32, i32), 4) = ((-1, 0), (0, -1), (1, 0), (0, 1));
2929
for (y: i32 in Core.Range(43)) {
@@ -37,10 +37,10 @@ class PathsToTop {
3737
if (adj_x >= 0 and adj_x < 43 and
3838
adj_y >= 0 and adj_y < 43 and
3939
terrain.height[adj_x][adj_y] == level + 1) {
40-
paths += self->paths[adj_x][adj_y];
40+
paths += self.paths[adj_x][adj_y];
4141
}
4242
}
43-
self->paths[x][y] = paths;
43+
self.paths[x][y] = paths;
4444
total += paths;
4545
}
4646
}

examples/advent2024/day12_common.carbon

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -42,13 +42,13 @@ class DisjointSetForest {
4242
return var;
4343
}
4444

45-
fn Lookup[addr self: Self*](a: i32) -> i32 {
46-
let next: i32 = self->nodes[a].next;
45+
fn Lookup[ref self: Self](a: i32) -> i32 {
46+
let next: i32 = self.nodes[a].next;
4747
if (next == a) {
4848
return next;
4949
}
50-
let resolved: i32 = self->Lookup(next);
51-
self->nodes[a].next = resolved;
50+
let resolved: i32 = self.Lookup(next);
51+
self.nodes[a].next = resolved;
5252
return resolved;
5353
}
5454

@@ -60,22 +60,22 @@ class DisjointSetForest {
6060
return self.nodes[canon_a].weight;
6161
}
6262

63-
fn Union[addr self: Self*](a: i32, b: i32) {
64-
let canon_b: i32 = self->Lookup(b);
65-
self->Set(a, canon_b);
66-
++self->nodes[canon_b].unions;
63+
fn Union[ref self: Self](a: i32, b: i32) {
64+
let canon_b: i32 = self.Lookup(b);
65+
self.Set(a, canon_b);
66+
++self.nodes[canon_b].unions;
6767
}
6868

69-
private fn Set[addr self: Self*](a: i32, canon_b: i32) {
70-
let next: i32 = self->nodes[a].next;
71-
self->nodes[a].next = canon_b;
69+
private fn Set[ref self: Self](a: i32, canon_b: i32) {
70+
let next: i32 = self.nodes[a].next;
71+
self.nodes[a].next = canon_b;
7272
if (next == a) {
7373
if (a != canon_b) {
74-
self->nodes[canon_b].weight += self->nodes[a].weight;
75-
self->nodes[canon_b].unions += self->nodes[a].unions;
74+
self.nodes[canon_b].weight += self.nodes[a].weight;
75+
self.nodes[canon_b].unions += self.nodes[a].unions;
7676
}
7777
} else {
78-
self->Set(next, canon_b);
78+
self.Set(next, canon_b);
7979
}
8080
}
8181

examples/advent2024/day2_part1.carbon

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -15,23 +15,23 @@ class ReportState {
1515
.increasing = false, .safe_so_far = true};
1616
}
1717

18-
fn Add[addr self: Self*](level: i32) {
19-
++self->levels_so_far;
20-
if (self->levels_so_far >= 2) {
21-
if (not IsSafeDelta(self->previous, level)) {
18+
fn Add[ref self: Self](level: i32) {
19+
++self.levels_so_far;
20+
if (self.levels_so_far >= 2) {
21+
if (not IsSafeDelta(self.previous, level)) {
2222
// Difference is zero or too large.
23-
self->safe_so_far = false;
23+
self.safe_so_far = false;
2424
}
2525

26-
var is_increase: bool = level > self->previous;
27-
if (self->levels_so_far == 2) {
28-
self->increasing = is_increase;
29-
} else if (is_increase != self->increasing) {
26+
var is_increase: bool = level > self.previous;
27+
if (self.levels_so_far == 2) {
28+
self.increasing = is_increase;
29+
} else if (is_increase != self.increasing) {
3030
// Not monotone.
31-
self->safe_so_far = false;
31+
self.safe_so_far = false;
3232
}
3333
}
34-
self->previous = level;
34+
self.previous = level;
3535
}
3636

3737
var levels_so_far: i32;

examples/advent2024/day2_part2.carbon

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,11 @@ import library "io_utils";
1212
// A three-element sliding window of recent levels.
1313
class Window {
1414
fn Make() -> Window { return {.data = (0,0,0), .size = 0}; }
15-
fn Add[addr self: Self*](n: i32) {
16-
self->data[2] = self->data[1];
17-
self->data[1] = self->data[0];
18-
self->data[0] = n;
19-
++self->size;
15+
fn Add[ref self: Self](n: i32) {
16+
self.data[2] = self.data[1];
17+
self.data[1] = self.data[0];
18+
self.data[0] = n;
19+
++self.size;
2020
}
2121

2222
var data: array(i32, 3);
@@ -36,7 +36,7 @@ class ReportState {
3636
.removable_double_bad_edge = false};
3737
}
3838

39-
fn OnAdd[addr self: Self*](window: Window) {
39+
fn OnAdd[ref self: Self](window: Window) {
4040
if (window.size < 2) {
4141
return;
4242
}
@@ -47,39 +47,39 @@ class ReportState {
4747
let c: i32 = window.data[0];
4848

4949
// Keep a count of the unsafe edges.
50-
let b_to_c: bool = IsSafe(window.data[1], window.data[0], self->increasing);
50+
let b_to_c: bool = IsSafe(window.data[1], window.data[0], self.increasing);
5151
if (not b_to_c) {
52-
++self->bad_edges;
52+
++self.bad_edges;
5353

5454
// We have a removable single bad edge if the first edge is unsafe.
5555
if (window.size == 2) {
56-
self->removable_single_bad_edge = true;
56+
self.removable_single_bad_edge = true;
5757
}
5858
}
5959

6060
if (window.size >= 3) {
6161
let a: i32 = window.data[2];
62-
if (IsSafe(a, c, self->increasing)) {
63-
let lhs: bool = IsSafe(a, b, self->increasing);
62+
if (IsSafe(a, c, self.increasing)) {
63+
let lhs: bool = IsSafe(a, b, self.increasing);
6464
let rhs: bool = b_to_c;
6565
if (not lhs and not rhs) {
6666
// If a->b and b->c are both unsafe, but a->c is safe,
6767
// then we have a removable double bad edge.
68-
self->removable_double_bad_edge = true;
68+
self.removable_double_bad_edge = true;
6969
} else if (not lhs or not rhs) {
7070
// If a->b or b->c is unsafe but a->c is safe, then we have a
7171
// removable single bad edge.
72-
self->removable_single_bad_edge = true;
72+
self.removable_single_bad_edge = true;
7373
}
7474
}
7575
}
7676
}
7777

78-
fn OnFinish[addr self: Self*](window: Window) {
78+
fn OnFinish[ref self: Self](window: Window) {
7979
if (window.size >= 2 and
80-
not IsSafe(window.data[1], window.data[0], self->increasing)) {
80+
not IsSafe(window.data[1], window.data[0], self.increasing)) {
8181
// We have a removable single bad edge if the last edge is unsafe.
82-
self->removable_single_bad_edge = true;
82+
self.removable_single_bad_edge = true;
8383
}
8484
}
8585

examples/advent2024/day5_common.carbon

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -61,9 +61,9 @@ class PageList {
6161
return var;
6262
}
6363

64-
fn Add[addr self: Self*](page: i32) {
65-
self->pages[self->num_pages] = page;
66-
++self->num_pages;
64+
fn Add[ref self: Self](page: i32) {
65+
self.pages[self.num_pages] = page;
66+
++self.num_pages;
6767
}
6868

6969
fn FollowsRules[self: Self](rules: Rules) -> bool {
@@ -87,12 +87,12 @@ class PageList {
8787
return true;
8888
}
8989

90-
fn ExtractPossibleFirstPage[addr self: Self*](rules: Rules) -> i32 {
91-
for (i: i32 in Core.Range(self->num_pages)) {
92-
var page: i32 = self->pages[i];
93-
if (self->IsPossibleFirstPage(rules, page)) {
94-
self->pages[i] = self->pages[self->num_pages - 1];
95-
--self->num_pages;
90+
fn ExtractPossibleFirstPage[ref self: Self](rules: Rules) -> i32 {
91+
for (i: i32 in Core.Range(self.num_pages)) {
92+
var page: i32 = self.pages[i];
93+
if (self.IsPossibleFirstPage(rules, page)) {
94+
self.pages[i] = self.pages[self.num_pages - 1];
95+
--self.num_pages;
9696
return page;
9797
}
9898
}

examples/advent2024/day6_common.carbon

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -57,34 +57,34 @@ class Maze {
5757
return var;
5858
}
5959

60-
fn Step[addr self: Self*]() -> bool {
61-
let x: i32 = self->loc.0 + self->dir.0;
62-
let y: i32 = self->loc.1 + self->dir.1;
60+
fn Step[ref self: Self]() -> bool {
61+
let x: i32 = self.loc.0 + self.dir.0;
62+
let y: i32 = self.loc.1 + self.dir.1;
6363
if (x < 0 or x >= 130 or y < 0 or y >= 130) {
6464
return false;
6565
}
66-
if (self->data[x][y] == Wall()) {
66+
if (self.data[x][y] == Wall()) {
6767
// TODO: Should this work?
68-
// self->dir = (-self->dir.1, self->dir.0);
69-
let d: (i32, i32) = self->dir;
70-
self->dir = (-d.1, d.0);
68+
// self.dir = (-self.dir.1, self.dir.0);
69+
let d: (i32, i32) = self.dir;
70+
self.dir = (-d.1, d.0);
7171
} else {
72-
self->loc = (x, y);
73-
self->data[x][y] = Visited();
72+
self.loc = (x, y);
73+
self.data[x][y] = Visited();
7474
}
7575
return true;
7676
}
7777

78-
fn AddObstacle[addr self: Self*]() -> bool {
79-
let x: i32 = self->loc.0 + self->dir.0;
80-
let y: i32 = self->loc.1 + self->dir.1;
78+
fn AddObstacle[ref self: Self]() -> bool {
79+
let x: i32 = self.loc.0 + self.dir.0;
80+
let y: i32 = self.loc.1 + self.dir.1;
8181
if (x < 0 or x >= 130 or y < 0 or y >= 130) {
8282
return false;
8383
}
84-
if (self->data[x][y] != Empty()) {
84+
if (self.data[x][y] != Empty()) {
8585
return false;
8686
}
87-
self->data[x][y] = Wall();
87+
self.data[x][y] = Wall();
8888
return true;
8989
}
9090

0 commit comments

Comments
 (0)