Hmm, it seems that mad(a,b,c) is not defined in the spec for int or uint. So the issue here is one of conversions, where int is being converted to float to execute the mad operation...
My mistake, Doh!
While I am at it, AMD OpenCL compiler allows:
int lid = get_local_id(0);
Where (if I am interpreting this right), section 6.2.6 OpenCL spec (rule 4) indicates that uint is higher rank than int, meaning this conversion shouldn't be allowed implicitly.