static PyObject * gcc_python_maybe_get_identifier(PyObject *self, PyObject *args) { const char *str; tree t; if (!PyArg_ParseTuple(args, "s:maybe_get_identifier", &str)) { return NULL; } t = maybe_get_identifier(str); return gcc_python_make_wrapper_tree(t); }
static PyObject * PyGcc_maybe_get_identifier(PyObject *self, PyObject *args) { const char *str; tree t; if (!PyArg_ParseTuple(args, "s:maybe_get_identifier", &str)) { return NULL; } t = maybe_get_identifier(str); return PyGccTree_New(gcc_private_make_tree(t)); }
static void warn_self_assign (gimple stmt) { tree rhs, lhs; /* Check assigment statement. */ if (gimple_assign_single_p (stmt)) { rhs = get_real_ref_rhs (gimple_assign_rhs1 (stmt)); if (!rhs) return; lhs = gimple_assign_lhs (stmt); if (TREE_CODE (lhs) == SSA_NAME) { lhs = SSA_NAME_VAR (lhs); if (!lhs || DECL_ARTIFICIAL (lhs)) return; } compare_and_warn (stmt, lhs, rhs); } /* Check overloaded operator '=' (if enabled). */ else if (check_operator_eq && is_gimple_call (stmt)) { tree fdecl = gimple_call_fndecl (stmt); if (fdecl && (DECL_NAME (fdecl) == maybe_get_identifier ("operator="))) { /* If 'operator=' takes reference operands, the arguments will be ADDR_EXPR trees. In this case, just remove the address-taken operator before we compare the lhs and rhs. */ lhs = gimple_call_arg (stmt, 0); if (TREE_CODE (lhs) == ADDR_EXPR) lhs = TREE_OPERAND (lhs, 0); rhs = gimple_call_arg (stmt, 1); if (TREE_CODE (rhs) == ADDR_EXPR) rhs = TREE_OPERAND (rhs, 0); compare_and_warn (stmt, lhs, rhs); } } }