https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119222

--- Comment #16 from Gwen Fu <gwen3293940943 at gmail dot com> ---
I am void under the gcc/c-family/c-warn.cc file
warnings_for_convert_and_check (location_t loc, tree type, tree expr, tree
result) function performs the following judgment and processing: 

/*"inifity to int" this operation belongs to FIX_TRUNC_EXPR*/ 
else if (TREE_CODE(result) == FIX_TRUNC_EXPR 
&& TREE_CODE(exprtype) == REAL_TYPE) 
{ 
bool warn_flag = false; 
tree dst = expr; 
/*Considering that it may be an assignment expression, 
expr may be a variable declaration.*/ 
if(TREE_CODE(dst) == VAR_DECL) 
dst = DECL_INITIAL(dst); 

/*This situation has not been found during the debugging process, 
but just in case, the judgment of this situation is still added*/ 
if (TREE_CODE(dst) == REAL_CST) 
{ 
REAL_VALUE_TYPE value = TREE_REAL_CST(expr); 
bool is_inf = REAL_VALUE_ISINF(value); 
if (is_inf) 
warn_flag = true; 
} 
else if (TREE_CODE(dst) == RDIV_EXPR 
&& TREE_CODE (TREE_OPERAND(dst, 1)) == REAL_CST 
&& real_zerop (TREE_OPERAND(dst, 1))) 
warn_flag = true; 
/*After getting the initial value of the variable, 
the node type is FLOAT_EXPR*/ 
else if (TREE_CODE(dst) == FLOAT_EXPR) 
{ 
tree op = dst; if(EXPR_P(TREE_OPERAND(op, 0)))
op = TREE_OPERAND(op, 0) ;

tree denominator = TREE_OPERAND(op, 1) ;
if ((TREE_CODE(denominator) == INTEGER_CST
&& integer_zerop(denominator)))
warn_flag = true;
}
if(warn_flag)
warning_at (loc, 0, "Undefined behavior : conversion "
"from %qT to %qT", expr, type);

conversion_warning(loc , type , expr , result);
}
When performing "make -check-gcc", a series of Fail messages are displayed in
the file gcc.dg/analyzer/data-model-1.c, but these messages did not appear
before the source code was modified:

FAIL: gcc.dg/analyzer/data-model-1.c (internal compiler error: Segmentation
fault)
FAIL: gcc.dg/analyzer/data-model-1.c (test for warnings, line 19)
.......
FAIL: gcc.dg/analyzer/data-model-1.c (test for warnings, line 1015)
FAIL: gcc.dg/analyzer/data-model-1.c (test for warnings, line 1016)
FAIL: gcc.dg/analyzer/data-model-1.c (test for warnings, line 1028)
FAIL: gcc.dg/analyzer/data-model-1.c (test for warnings, line 1029)
FAIL: gcc.dg/analyzer/data-model-1.c (test for excess errors)

Reply via email to