Daily report (2026-08-08)

1. Summary

Today work has focused on three things; Reviewing the MCP and running the tests that I thought would be fit for this change, finishing work on the non-exhaustive macro stuff, and making progress on the FreeBSD netlink PR.

I first started off by ensuring the MCP implementation wasn’t lacking something obvious. I ran tests for compiler/rustc_target, librustdoc and tidy. Those didn’t seem to catch any regressions so I thought it was OK to submit the PR.

Still, it seems that a test run by a bot has found some issues relating to some UI tests where the possible values of target_env reported in the diagnostic being tested were not up-to-date. I had missed that and it’s still not fixed.

The next thing I did was to finish up work on expanding the capabilities of the macros we use to declare records in rust-lang/libc. Past attempts had failed to get a certain macro subtree matched before another one.

Today I figured out why. As it turns out, when matching against a meta fragment specifier, if the macro annotates a top-level item (i.e. a type and not a field in a type) then diagnostics will be generated before expanding.

This means that non-existent attributes like the one I was trying to implement to opt out of having all records be added a private __non_exhaustive field were being diagnosed before expansion finished (as it is eventually removed.)

The solution I only came up after looking through the PR that my mentor linked to in some prior messages to this report. The patchset in that PR matched instead on arbitrary token trees preceded by a literal # token.

Using this “matcher” across all calls from nested macros to the actual recursive macro, the expander will first finish recursing and only then pass that off to the parser. TIL.

I’ve already opened a PR with these changes and have reported the results in the relevant issue thread. That other PR (by another contributor) also improves on these macros but is unrelated to the non-exhaustive stuff.

The next thing I did was to work on the FreeBSD PR concerning the header symbol conflicts between two C headers. This was the last thing pending from this week’s reviews.

I’ve been trying to solve it without implementing TestGroup in ctest, and that may just work. Still, it may not end up as the cleanest solution. Thus far, I’ve created a new test specifically for the netlink interface.

This test is just a dummy file that !includes the ctest Rust output from standalone tests generated in the build script when running against a FreeBSD target. These tests exclude all other bindings we expose except netlink’s.

This should allow keeping the same public structure, while also testing separately both the netlink and if_mib bindigns. The latter has been left to be tested as part of the rest of the full (regular) test suite.

From inspecting CI logs as I write this report, this seems to have worked. Of course, getting this to work with the SemVer tests is not going to be as simple. That’s still something I got to think about.

2. Blockers

None.

3. Plan for the week

Today I believe I’ve made a fair amount of progress on most things. I don’t plan on continuing work on anything tomorrow, because I’ll be writing the first draft of my final work GSoC product.

This could take me the entire day or it could be done in a few hours. If I’m done earlier than expected, then I’ll just keep working the FreeBSD PR, and then move on to the MCP implementation test fixes.

The same applies to next week’s plan. Beyond those two, I’ll just keep answering and reviewing feedback I get on pending PRs/issues, as well as addressing new issues/stale PRs in the 1.0 milestone.