Integer Promotion Weirdness

Let's say

0.5_333_333_333_333
param x = 0.5_333_333_333_333;
proc y() param do return 0.5_333_333_333_333;

Given that whenever I see an identifier, I assume it is typed, e.g. even in C, I try and discipline myself to do

#define _B ((uint32_t) 127))

That is, I do not have a language such as Pascal or derivatives or C which allows me to define symbolic names for un-typed literals, as in

const tom = 9876; bob = 5432;
#define TOM (2*4938)
#define BOB (4*1358)

So, I would always assume that x and y() would potentially behave differently to 0.5_333_333_333_333 which I believe should inherit its type (and precision) from the dominant type of all the typed variables in the expression, assuming there are no parentheses to change precedence.

With sincere apologies for being picky, because 0.5 in your original question is exact for real(w) where w == 8 and above, they will behave the same because

0.5:real(8) == 0.5:real(16) == 0.5:real(32) == .... == 0.5:real(256);

But that only works for literals which are exact powers of the radix 2. Probably also 0.5:real(4) for what it is worth.