But according to R2018b document,
Simulink passes units through the following blocks that do not change data, known as noncomputation blocks
Simulink does not propagate units through blocks that produce new data as output.
So it is possible to specify the unit of a root level Inport block as "N", pass it through several levels of sub-system Inport (all specified as inherit) and then check the compiledportunits of the inner Inport block and it will return "N".
You can not expect the CompiledPortUnits of a Product block to be "N*m" by specifying the two inputs of the Product block to be "N" and "m".