Подумал, может, кому интересно.
Не прошло и 25 лет, как разработчики GCC все таки прониклись пользой отслеживания размерности типов. Начиная с версии 4.3 (первый релиз вышел в марте 2008) GCC умеет распознавать и сообщать о ситуациях с присваиманием из long в char и им подобных.
Опция -Wconversion, которая работала только для fixed и floating point теперь разделена на две опции -Wtraditional-conversion и -Wconversion.
Подробности можно почитать здесь
http://gcc.gnu.org/wiki/NewWconversionЯ проверил - на приведенный пример ругается "warning: conversion to ‘short unsigned int’ from ‘long unsigned int’ may alter its value".