Init block to const-cast - does it copy?

I want a const, but need a var first, to initialize. I think a good way to do it would be as in this contrivance:

   const c = init: {
      var c_ = [_]u8{1, 2, 3};
      c_[1] = 5;
      break :init c_;
   };
  1. True?

  2. I think this may result in an item-by-item copy from c_ to the final c; yes/no?

  3. If yes, is there a different way… a way to simply tell the compiler, “I just want a symbol that references the modified array, and want it to be considered const from here on out”?

  4. If no, is this construct susceptible to the “aliasing” problems that I remember half-internalizing when discussed a couple of months ago? I feel like it wouldn’t even matter, in this case, though, since I’ve got a const in the end.

  5. Extra: is there a quick way to school me in discovering the answer to number 2, by myself, via godbolt or something? Keep in mind that I’m not very assembly-savvy, and the answer may therefore be: “yeah, if you were more assembly-savvy, but skip it for now.”

did you know that zig is availlable on compiler explorer ? You could try your sample code there and see what the compiler generates. I have done it here for you: Compiler Explorer

I did, actually! (Though I referred to it as godbolt in #5); but I’m afraid I need slightly more help than that, or to be told I just need to learn assembly to do good zig. I’m not sure I’m interpreting that assembly correctly - is it saying that a full deep copy is happening? Can you indicate the assembly lines that indicate that? This, then, would answer #2, and my help indicate an answer to #1: ‘is this a “good” way to do this?’… but if a deep copy is happening, and especially if the answer to #1 is “no”, then I’m especially interested in an answer to #3. (And I’m curious about confirmation on #4, which might be discernible through the godbolt, but that would definitely be hard for me.)