I found some questions concerning short arithmetic but none of them compared the following three cases. I wonder why these two pieces of code are ok
(a)
short m = 1;
m += m;
(b)
short m = 1;
m += m + m;
while this
(c)
short m = 1;
m = m + m;
leads to the error "Type mismatch: cannot convert from int to short" ?

It's not a warning - it's an error.
There are two facts at work here:
short + short operator; the "smallest" addition is int + int, with a result type of int, and the operands are automatically promoted to int if necessary (see JLS 15.18.2)The second point is why the first two operations work. You've effectively got:
m = (short) (m + m);
And
m = (short) (m + m + m);
The first point is why the last operation doesn't work - the type of m + m is int, and you can't assign an int value to a short variable. (You need a cast...)
See more on this question at Stackoverflow