diff --git a/include/asm/warning.h b/include/asm/warning.h index 5613799f..de854b33 100644 --- a/include/asm/warning.h +++ b/include/asm/warning.h @@ -21,6 +21,7 @@ enum WarningID { WARNING_SHIFT, WARNING_USER, WARNING_SHIFT_AMOUNT, + WARNING_TRUNCATION, NB_WARNINGS, diff --git a/src/asm/asmy.y b/src/asm/asmy.y index d32873bb..71aa2218 100644 --- a/src/asm/asmy.y +++ b/src/asm/asmy.y @@ -1190,7 +1190,7 @@ constlist_32bit_entry : /* empty */ const_8bit : relocconst { if( (!rpn_isReloc(&$1)) && (($1.nVal < -128) || ($1.nVal > 255)) ) - yyerror("Expression must be 8-bit"); + warning(WARNING_TRUNCATION, "Expression must be 8-bit"); $$ = $1; } ; @@ -1198,7 +1198,7 @@ const_8bit : relocconst const_16bit : relocconst { if ((!rpn_isReloc(&$1)) && (($1.nVal < -32768) || ($1.nVal > 65535))) - yyerror("Expression must be 16-bit"); + warning(WARNING_TRUNCATION, "Expression must be 16-bit"); $$ = $1; } ; diff --git a/src/asm/warning.c b/src/asm/warning.c index 80557158..253044a1 100644 --- a/src/asm/warning.c +++ b/src/asm/warning.c @@ -37,6 +37,7 @@ static enum WarningState const defaultWarnings[NB_WARNINGS] = { WARNING_DISABLED, /* Shifting undefined behavior */ WARNING_ENABLED, /* User warnings */ WARNING_DISABLED, /* Strange shift amount */ + WARNING_ENABLED, /* Implicit truncation loses some bits */ }; static enum WarningState warningStates[NB_WARNINGS]; @@ -72,6 +73,7 @@ static char const *warningFlags[NB_WARNINGS_ALL] = { "shift", "user", "shift-amount", + "truncation", /* Meta warnings */ "all",