static bool verify_ssa_name (tree ssa_name, bool is_virtual) { if (TREE_CODE (ssa_name) != SSA_NAME) { error ("expected an SSA_NAME object"); return true; } if (TREE_TYPE (ssa_name) != TREE_TYPE (SSA_NAME_VAR (ssa_name))) { error ("type mismatch between an SSA_NAME and its symbol"); return true; } if (SSA_NAME_IN_FREE_LIST (ssa_name)) { error ("found an SSA_NAME that had been released into the free pool"); return true; } if (is_virtual && is_gimple_reg (ssa_name)) { error ("found a virtual definition for a GIMPLE register"); return true; } if (!is_virtual && !is_gimple_reg (ssa_name)) { error ("found a real definition for a non-register"); return true; } if (is_virtual && var_ann (SSA_NAME_VAR (ssa_name)) && get_subvars_for_var (SSA_NAME_VAR (ssa_name)) != NULL) { error ("found real variable when subvariables should have appeared"); return true; } return false; }
static bool dest_safe_for_nrv_p (tree dest) { switch (TREE_CODE (dest)) { case VAR_DECL: { subvar_t subvar; if (is_call_clobbered (dest)) return false; for (subvar = get_subvars_for_var (dest); subvar; subvar = subvar->next) if (is_call_clobbered (subvar->var)) return false; return true; } case ARRAY_REF: case COMPONENT_REF: return dest_safe_for_nrv_p (TREE_OPERAND (dest, 0)); default: return false; } }