Avoid copying eedges in infinite_loop::infinite_loop. Use initializer lists in the various places reported in PR analyzer/112655 (apart from coord_test's ctor, which would require nontrivial refactoring).
Successfully bootstrapped & regrtested on x86_64-pc-linux-gnu. Pushed to trunk as r14-6549-g8cf5afba5dc482 gcc/analyzer/ChangeLog: PR analyzer/112655 * infinite-loop.cc (infinite_loop::infinite_loop): Pass eedges via rvalue reference rather than by value. (starts_infinite_loop_p): Move eedges when constructing an infinite_loop instance. * sm-file.cc (fileptr_state_machine::fileptr_state_machine): Use initializer list for states. * sm-sensitive.cc (sensitive_state_machine::sensitive_state_machine): Likewise. * sm-signal.cc (signal_state_machine::signal_state_machine): Likewise. * sm-taint.cc (taint_state_machine::taint_state_machine): Likewise. * varargs.cc (va_list_state_machine::va_list_state_machine): Likewise. --- gcc/analyzer/infinite-loop.cc | 8 ++++---- gcc/analyzer/sm-file.cc | 12 ++++++------ gcc/analyzer/sm-sensitive.cc | 6 +++--- gcc/analyzer/sm-signal.cc | 6 +++--- gcc/analyzer/sm-taint.cc | 12 ++++++------ gcc/analyzer/varargs.cc | 6 +++--- 6 files changed, 25 insertions(+), 25 deletions(-) diff --git a/gcc/analyzer/infinite-loop.cc b/gcc/analyzer/infinite-loop.cc index c47ce1c89085..fc194d919cf3 100644 --- a/gcc/analyzer/infinite-loop.cc +++ b/gcc/analyzer/infinite-loop.cc @@ -71,7 +71,7 @@ struct infinite_loop { infinite_loop (const exploded_node &enode, location_t loc, - std::vector<const exploded_edge *> eedges, + std::vector<const exploded_edge *> &&eedges, logger *logger) : m_enode (enode), m_loc (loc), @@ -423,9 +423,9 @@ starts_infinite_loop_p (const exploded_node &enode, free (filename); } return ::make_unique<infinite_loop> (enode, - first_loc, - eedges, - logger); + first_loc, + std::move (eedges), + logger); } else { diff --git a/gcc/analyzer/sm-file.cc b/gcc/analyzer/sm-file.cc index f8e31f873a5a..323df23b1b71 100644 --- a/gcc/analyzer/sm-file.cc +++ b/gcc/analyzer/sm-file.cc @@ -270,13 +270,13 @@ private: /* fileptr_state_machine's ctor. */ fileptr_state_machine::fileptr_state_machine (logger *logger) -: state_machine ("file", logger) +: state_machine ("file", logger), + m_unchecked (add_state ("unchecked")), + m_null (add_state ("null")), + m_nonnull (add_state ("nonnull")), + m_closed (add_state ("closed")), + m_stop (add_state ("stop")) { - m_unchecked = add_state ("unchecked"); - m_null = add_state ("null"); - m_nonnull = add_state ("nonnull"); - m_closed = add_state ("closed"); - m_stop = add_state ("stop"); } /* Get a set of functions that are known to take a FILE * that must be open, diff --git a/gcc/analyzer/sm-sensitive.cc b/gcc/analyzer/sm-sensitive.cc index 4776d6465bb5..aea337cdccda 100644 --- a/gcc/analyzer/sm-sensitive.cc +++ b/gcc/analyzer/sm-sensitive.cc @@ -161,10 +161,10 @@ private: /* sensitive_state_machine's ctor. */ sensitive_state_machine::sensitive_state_machine (logger *logger) -: state_machine ("sensitive", logger) +: state_machine ("sensitive", logger), + m_sensitive (add_state ("sensitive")), + m_stop (add_state ("stop")) { - m_sensitive = add_state ("sensitive"); - m_stop = add_state ("stop"); } /* Warn about an exposure at NODE and STMT if ARG is in the "sensitive" diff --git a/gcc/analyzer/sm-signal.cc b/gcc/analyzer/sm-signal.cc index 6bca395ac5c7..799bae5364b8 100644 --- a/gcc/analyzer/sm-signal.cc +++ b/gcc/analyzer/sm-signal.cc @@ -182,10 +182,10 @@ private: /* signal_state_machine's ctor. */ signal_state_machine::signal_state_machine (logger *logger) -: state_machine ("signal", logger) +: state_machine ("signal", logger), + m_in_signal_handler (add_state ("in_signal_handler")), + m_stop (add_state ("stop")) { - m_in_signal_handler = add_state ("in_signal_handler"); - m_stop = add_state ("stop"); } /* Update MODEL for edges that simulate HANDLER_FUN being called as diff --git a/gcc/analyzer/sm-taint.cc b/gcc/analyzer/sm-taint.cc index 597e8e55609a..ce18957b56b8 100644 --- a/gcc/analyzer/sm-taint.cc +++ b/gcc/analyzer/sm-taint.cc @@ -830,13 +830,13 @@ private: /* taint_state_machine's ctor. */ taint_state_machine::taint_state_machine (logger *logger) -: state_machine ("taint", logger) +: state_machine ("taint", logger), + m_tainted (add_state ("tainted")), + m_has_lb (add_state ("has_lb")), + m_has_ub (add_state ("has_ub")), + m_stop (add_state ("stop")), + m_tainted_control_flow (add_state ("tainted-control-flow")) { - m_tainted = add_state ("tainted"); - m_has_lb = add_state ("has_lb"); - m_has_ub = add_state ("has_ub"); - m_stop = add_state ("stop"); - m_tainted_control_flow = add_state ("tainted-control-flow"); } state_machine::state_t diff --git a/gcc/analyzer/varargs.cc b/gcc/analyzer/varargs.cc index 7cdfb203a339..d505a80b06a0 100644 --- a/gcc/analyzer/varargs.cc +++ b/gcc/analyzer/varargs.cc @@ -241,10 +241,10 @@ private: /* va_list_state_machine's ctor. */ va_list_state_machine::va_list_state_machine (logger *logger) -: state_machine ("va_list", logger) +: state_machine ("va_list", logger), + m_started (add_state ("started")), + m_ended (add_state ("ended")) { - m_started = add_state ("started"); - m_ended = add_state ("ended"); } /* Implementation of the various "va_*" functions for -- 2.26.3