Message ID | 20190606051227.90944-1-natechancellor@gmail.com (mailing list archive) |
---|---|
State | Accepted |
Commit | 83a6edbb8fe928e801b9b6cab13e81109b185918 |
Headers | show |
Series | ASoC: rt1011: Mark format integer literals as unsigned | expand |
On Wed, Jun 5, 2019 at 10:13 PM Nathan Chancellor <natechancellor@gmail.com> wrote: > > Clang warns: > > sound/soc/codecs/rt1011.c:1291:12: warning: integer literal is too large > to be represented in type 'long', interpreting as 'unsigned long' per > C89; this literal will have type 'long long' in C99 onwards > [-Wc99-compat] > format = 2147483648; /* 2^24 * 128 */ This number's bitpattern is a leading one followed by 31 zeros. `format` is declared as `unsigned int`, and literals in C are signed unless suffixed, so this patch LGTM. Maybe a macro declaring such a bitpattern would improve readability over the existing magic constant and comment? Reviewed-by: Nick Desaulniers <ndesaulniers@google.com> > ^ > sound/soc/codecs/rt1011.c:2123:13: warning: integer literal is too large > to be represented in type 'long', interpreting as 'unsigned long' per > C89; this literal will have type 'long long' in C99 onwards > [-Wc99-compat] > format = 2147483648; /* 2^24 * 128 */ > ^ > 2 warnings generated. > > Mark the integer literals as unsigned explicitly so that if the kernel > does ever bump the C standard it uses, the behavior is consitent. s/consitent/consistent/ :set spell :P
On Thu, Jun 06, 2019 at 11:50:10AM -0700, Nick Desaulniers wrote: > On Wed, Jun 5, 2019 at 10:13 PM Nathan Chancellor > <natechancellor@gmail.com> wrote: > > > > Clang warns: > > > > sound/soc/codecs/rt1011.c:1291:12: warning: integer literal is too large > > to be represented in type 'long', interpreting as 'unsigned long' per > > C89; this literal will have type 'long long' in C99 onwards > > [-Wc99-compat] > > format = 2147483648; /* 2^24 * 128 */ > > This number's bitpattern is a leading one followed by 31 zeros. > `format` is declared as `unsigned int`, and literals in C are signed > unless suffixed, so this patch LGTM. Maybe a macro declaring such a > bitpattern would improve readability over the existing magic constant > and comment? I thought about it but that is ultimately up to the maintainer I think. > Reviewed-by: Nick Desaulniers <ndesaulniers@google.com> > > > ^ > > sound/soc/codecs/rt1011.c:2123:13: warning: integer literal is too large > > to be represented in type 'long', interpreting as 'unsigned long' per > > C89; this literal will have type 'long long' in C99 onwards > > [-Wc99-compat] > > format = 2147483648; /* 2^24 * 128 */ > > ^ > > 2 warnings generated. > > > > Mark the integer literals as unsigned explicitly so that if the kernel > > does ever bump the C standard it uses, the behavior is consitent. > > s/consitent/consistent/ > > :set spell Grr... I can send a v2 unless the maintainer wants to manually fix it up. Thank you for the review as always. Nathan
diff --git a/sound/soc/codecs/rt1011.c b/sound/soc/codecs/rt1011.c index 349d6db7ecd4..3a0ae80c5ee0 100644 --- a/sound/soc/codecs/rt1011.c +++ b/sound/soc/codecs/rt1011.c @@ -1288,7 +1288,7 @@ static int rt1011_r0_load_mode_put(struct snd_kcontrol *kcontrol, if (snd_soc_component_get_bias_level(component) == SND_SOC_BIAS_OFF) { rt1011->r0_reg = ucontrol->value.integer.value[0]; - format = 2147483648; /* 2^24 * 128 */ + format = 2147483648U; /* 2^24 * 128 */ r0_integer = format / rt1011->r0_reg / 128; r0_factor = ((format / rt1011->r0_reg * 100) / 128) - (r0_integer * 100); @@ -2120,7 +2120,7 @@ static int rt1011_calibrate(struct rt1011_priv *rt1011, unsigned char cali_flag) dev_err(dev, "Calibrate R0 Failure\n"); ret = -EAGAIN; } else { - format = 2147483648; /* 2^24 * 128 */ + format = 2147483648U; /* 2^24 * 128 */ r0_integer = format / r0[0] / 128; r0_factor = ((format / r0[0] * 100) / 128) - (r0_integer * 100);
Clang warns: sound/soc/codecs/rt1011.c:1291:12: warning: integer literal is too large to be represented in type 'long', interpreting as 'unsigned long' per C89; this literal will have type 'long long' in C99 onwards [-Wc99-compat] format = 2147483648; /* 2^24 * 128 */ ^ sound/soc/codecs/rt1011.c:2123:13: warning: integer literal is too large to be represented in type 'long', interpreting as 'unsigned long' per C89; this literal will have type 'long long' in C99 onwards [-Wc99-compat] format = 2147483648; /* 2^24 * 128 */ ^ 2 warnings generated. Mark the integer literals as unsigned explicitly so that if the kernel does ever bump the C standard it uses, the behavior is consitent. Fixes: d6e65bb7ff0d ("ASoC: rt1011: Add RT1011 amplifier driver") Link: https://github.com/ClangBuiltLinux/linux/issues/506 Signed-off-by: Nathan Chancellor <natechancellor@gmail.com> --- sound/soc/codecs/rt1011.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)