re PR tree-optimization/89566 (ICE on compilable C++ code: in gimple_call_arg, at gimple.h:3166)
PR tree-optimization/89566 * gimple-ssa-sprintf.c (sprintf_dom_walker::handle_gimple_call): Set info.fncode to BUILT_IN_NONE if gimple_call_builtin_p failed. Punt if get_user_idx_format succeeds, but idx_format argument is not provided or doesn't have pointer type, or if idx_args is above number of provided arguments. * c-c++-common/pr89566.c: New test. From-SVN: r269384
This commit is contained in:
parent
da7382442e
commit
d6f7829a1f
@ -1,3 +1,12 @@
|
|||||||
|
2019-03-05 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
|
PR tree-optimization/89566
|
||||||
|
* gimple-ssa-sprintf.c (sprintf_dom_walker::handle_gimple_call):
|
||||||
|
Set info.fncode to BUILT_IN_NONE if gimple_call_builtin_p failed.
|
||||||
|
Punt if get_user_idx_format succeeds, but idx_format argument is
|
||||||
|
not provided or doesn't have pointer type, or if idx_args is above
|
||||||
|
number of provided arguments.
|
||||||
|
|
||||||
2019-03-04 Wilco Dijkstra <wdijkstr@arm.com>
|
2019-03-04 Wilco Dijkstra <wdijkstr@arm.com>
|
||||||
|
|
||||||
PR tree-optimization/89437
|
PR tree-optimization/89437
|
||||||
|
@ -3858,16 +3858,21 @@ sprintf_dom_walker::handle_gimple_call (gimple_stmt_iterator *gsi)
|
|||||||
if (!info.func)
|
if (!info.func)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
info.fncode = DECL_FUNCTION_CODE (info.func);
|
|
||||||
|
|
||||||
/* Format string argument number (valid for all functions). */
|
/* Format string argument number (valid for all functions). */
|
||||||
unsigned idx_format = UINT_MAX;
|
unsigned idx_format = UINT_MAX;
|
||||||
if (!gimple_call_builtin_p (info.callstmt, BUILT_IN_NORMAL))
|
if (gimple_call_builtin_p (info.callstmt, BUILT_IN_NORMAL))
|
||||||
|
info.fncode = DECL_FUNCTION_CODE (info.func);
|
||||||
|
else
|
||||||
{
|
{
|
||||||
unsigned idx_args;
|
unsigned idx_args;
|
||||||
idx_format = get_user_idx_format (info.func, &idx_args);
|
idx_format = get_user_idx_format (info.func, &idx_args);
|
||||||
if (idx_format == UINT_MAX)
|
if (idx_format == UINT_MAX
|
||||||
|
|| idx_format >= gimple_call_num_args (info.callstmt)
|
||||||
|
|| idx_args > gimple_call_num_args (info.callstmt)
|
||||||
|
|| !POINTER_TYPE_P (TREE_TYPE (gimple_call_arg (info.callstmt,
|
||||||
|
idx_format))))
|
||||||
return false;
|
return false;
|
||||||
|
info.fncode = BUILT_IN_NONE;
|
||||||
info.argidx = idx_args;
|
info.argidx = idx_args;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,3 +1,8 @@
|
|||||||
|
2019-03-05 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
|
PR tree-optimization/89566
|
||||||
|
* c-c++-common/pr89566.c: New test.
|
||||||
|
|
||||||
2019-03-04 Paolo Carlini <paolo.carlini@oracle.com>
|
2019-03-04 Paolo Carlini <paolo.carlini@oracle.com>
|
||||||
|
|
||||||
PR c++/84605
|
PR c++/84605
|
||||||
|
15
gcc/testsuite/c-c++-common/pr89566.c
Normal file
15
gcc/testsuite/c-c++-common/pr89566.c
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
/* PR tree-optimization/89566 */
|
||||||
|
/* { dg-do compile } */
|
||||||
|
|
||||||
|
typedef struct FILE { int i; } FILE;
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C"
|
||||||
|
#endif
|
||||||
|
int fprintf (FILE *, const char *, ...);
|
||||||
|
|
||||||
|
int
|
||||||
|
main ()
|
||||||
|
{
|
||||||
|
((void (*)()) fprintf) (); // { dg-warning "function called through a non-compatible type" "" { target c } }
|
||||||
|
return 0;
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user