Tool/software: Code Composer Studio
As noted in another post
#pragma PERSISTENT int foo;
does not result in the variable foo being persistent in FRAM. Instead, the compiler gives a warning "warning #1519-D: variable "foo" was declared persistent and should be explicitly initialized" and storage is allocated in .bss segment, i.e. RAM.
In my opinion the compiler should give an error message instead of a warning. The compiler has failed the contract to put the variable in FRAM. My analogy is if I would declare a variable an int but the compiler only generated a byte storage.
I think there are valid reasons not to initialize FRAM variables: I am going to initialize them at run-time on a power-on reset, or in other resets such as a software BOR reset (when I detect certain faults and must restart my app in its initial state.) After that, I expect the variables to persist through other resets (namely LPM4.5 resets.) Since I already have code to initialize the variables at run-time, it is more convenient not to write code to initialize them at compile time. Especially if the variables are more complicated structs.
To some extent, I am venting, because this oddity bit me.