Googletest export
Mark ACTION_Pn()-generated functions as must-use-result.
This catches when a client creates an action and discards it, thinking that the action has actually been applied to something.
This will help people who make the mistake of defining, for example, both `void Use(Foo*)` and `ACTION(Use) { Use(arg); }` for later application to a Foo.  With such an overload, a client may then write `Use();`, forgetting the param and being confused why nothing happens.
This also catches when a client defines their own action in terms of an ACTION()-generated one, invokes the ACTION's builder, and then fails to invoke the resulting action, thinking it's operating on the outer action's parameters.
PiperOrigin-RevId: 330614454
			
			
This commit is contained in:
		@@ -1637,6 +1637,9 @@ auto InvokeArgument(F f, Args... args) -> decltype(f(args...)) {
 | 
			
		||||
                                                                              \
 | 
			
		||||
   public:                                                                    \
 | 
			
		||||
    using base_type::base_type;                                               \
 | 
			
		||||
    name##Action() = default;                                                 \
 | 
			
		||||
    /* Work around https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82134 */      \
 | 
			
		||||
    name##Action(const name##Action&) { }                                     \
 | 
			
		||||
    template <typename F>                                                     \
 | 
			
		||||
    class gmock_Impl : public ::testing::ActionInterface<F> {                 \
 | 
			
		||||
     public:                                                                  \
 | 
			
		||||
@@ -1654,6 +1657,7 @@ auto InvokeArgument(F f, Args... args) -> decltype(f(args...)) {
 | 
			
		||||
      return_type gmock_PerformImpl(GMOCK_ACTION_ARG_TYPES_AND_NAMES_) const; \
 | 
			
		||||
    };                                                                        \
 | 
			
		||||
  };                                                                          \
 | 
			
		||||
  inline name##Action name() GTEST_MUST_USE_RESULT_;                          \
 | 
			
		||||
  inline name##Action name() { return name##Action(); }                       \
 | 
			
		||||
  template <typename F>                                                       \
 | 
			
		||||
  template <GMOCK_ACTION_TEMPLATE_ARGS_NAMES_>                                \
 | 
			
		||||
 
 | 
			
		||||
@@ -294,6 +294,20 @@
 | 
			
		||||
        p7(::std::move(gmock_p7)), p8(::std::move(gmock_p8)), \
 | 
			
		||||
        p9(::std::move(gmock_p9))
 | 
			
		||||
 | 
			
		||||
// Defines the copy constructor
 | 
			
		||||
#define GMOCK_INTERNAL_DEFN_COPY_AND_0_VALUE_PARAMS() \
 | 
			
		||||
    {}  // Work around https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82134
 | 
			
		||||
#define GMOCK_INTERNAL_DEFN_COPY_AND_1_VALUE_PARAMS(...) = default;
 | 
			
		||||
#define GMOCK_INTERNAL_DEFN_COPY_AND_2_VALUE_PARAMS(...) = default;
 | 
			
		||||
#define GMOCK_INTERNAL_DEFN_COPY_AND_3_VALUE_PARAMS(...) = default;
 | 
			
		||||
#define GMOCK_INTERNAL_DEFN_COPY_AND_4_VALUE_PARAMS(...) = default;
 | 
			
		||||
#define GMOCK_INTERNAL_DEFN_COPY_AND_5_VALUE_PARAMS(...) = default;
 | 
			
		||||
#define GMOCK_INTERNAL_DEFN_COPY_AND_6_VALUE_PARAMS(...) = default;
 | 
			
		||||
#define GMOCK_INTERNAL_DEFN_COPY_AND_7_VALUE_PARAMS(...) = default;
 | 
			
		||||
#define GMOCK_INTERNAL_DEFN_COPY_AND_8_VALUE_PARAMS(...) = default;
 | 
			
		||||
#define GMOCK_INTERNAL_DEFN_COPY_AND_9_VALUE_PARAMS(...) = default;
 | 
			
		||||
#define GMOCK_INTERNAL_DEFN_COPY_AND_10_VALUE_PARAMS(...) = default;
 | 
			
		||||
 | 
			
		||||
// Declares the fields for storing the value parameters.
 | 
			
		||||
#define GMOCK_INTERNAL_DEFN_AND_0_VALUE_PARAMS()
 | 
			
		||||
#define GMOCK_INTERNAL_DEFN_AND_1_VALUE_PARAMS(p0) p0##_type p0;
 | 
			
		||||
@@ -422,6 +436,11 @@
 | 
			
		||||
   public:\
 | 
			
		||||
    explicit GMOCK_ACTION_CLASS_(name, value_params)\
 | 
			
		||||
        GMOCK_INTERNAL_INIT_##value_params {}\
 | 
			
		||||
    GMOCK_ACTION_CLASS_(name, value_params)(\
 | 
			
		||||
        const GMOCK_ACTION_CLASS_(name, value_params)<\
 | 
			
		||||
            GMOCK_INTERNAL_LIST_##template_params\
 | 
			
		||||
            GMOCK_INTERNAL_LIST_TYPE_##value_params>&)\
 | 
			
		||||
        GMOCK_INTERNAL_DEFN_COPY_##value_params\
 | 
			
		||||
    template <typename F>\
 | 
			
		||||
    class gmock_Impl : public ::testing::ActionInterface<F> {\
 | 
			
		||||
     public:\
 | 
			
		||||
@@ -444,6 +463,12 @@
 | 
			
		||||
    }\
 | 
			
		||||
    GMOCK_INTERNAL_DEFN_##value_params\
 | 
			
		||||
  };\
 | 
			
		||||
  template <GMOCK_INTERNAL_DECL_##template_params\
 | 
			
		||||
            GMOCK_INTERNAL_DECL_TYPE_##value_params>\
 | 
			
		||||
  GMOCK_ACTION_CLASS_(name, value_params)<\
 | 
			
		||||
      GMOCK_INTERNAL_LIST_##template_params\
 | 
			
		||||
      GMOCK_INTERNAL_LIST_TYPE_##value_params> name(\
 | 
			
		||||
          GMOCK_INTERNAL_DECL_##value_params) GTEST_MUST_USE_RESULT_;\
 | 
			
		||||
  template <GMOCK_INTERNAL_DECL_##template_params\
 | 
			
		||||
            GMOCK_INTERNAL_DECL_TYPE_##value_params>\
 | 
			
		||||
  inline GMOCK_ACTION_CLASS_(name, value_params)<\
 | 
			
		||||
 
 | 
			
		||||
@@ -55,7 +55,6 @@ $$}} This meta comment fixes auto-indentation in editors.
 | 
			
		||||
$range i 0..n
 | 
			
		||||
$range k 0..n-1
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// Sometimes you want to give an action explicit template parameters
 | 
			
		||||
// that cannot be inferred from its value parameters.  ACTION() and
 | 
			
		||||
// ACTION_P*() don't support that.  ACTION_TEMPLATE() remedies that
 | 
			
		||||
@@ -176,6 +175,16 @@ $range j 0..i-1
 | 
			
		||||
    ($for j, [[p$j##_type gmock_p$j]])$if i>0 [[ : ]]$for j, [[p$j(::std::move(gmock_p$j))]]
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
]]
 | 
			
		||||
 | 
			
		||||
// Defines the copy constructor
 | 
			
		||||
 | 
			
		||||
$for i [[
 | 
			
		||||
#define GMOCK_INTERNAL_DEFN_COPY_AND_$i[[]]_VALUE_PARAMS$if i == 0[[() \
 | 
			
		||||
    {}  // Work around https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82134
 | 
			
		||||
]] $else [[(...) = default;]]
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
]]
 | 
			
		||||
 | 
			
		||||
// Declares the fields for storing the value parameters.
 | 
			
		||||
@@ -241,6 +250,11 @@ $range k 0..n-1
 | 
			
		||||
   public:\
 | 
			
		||||
    explicit GMOCK_ACTION_CLASS_(name, value_params)\
 | 
			
		||||
        GMOCK_INTERNAL_INIT_##value_params {}\
 | 
			
		||||
    GMOCK_ACTION_CLASS_(name, value_params)(\
 | 
			
		||||
        const GMOCK_ACTION_CLASS_(name, value_params)<\
 | 
			
		||||
            GMOCK_INTERNAL_LIST_##template_params\
 | 
			
		||||
            GMOCK_INTERNAL_LIST_TYPE_##value_params>&)\
 | 
			
		||||
        GMOCK_INTERNAL_DEFN_COPY_##value_params\
 | 
			
		||||
    template <typename F>\
 | 
			
		||||
    class gmock_Impl : public ::testing::ActionInterface<F> {\
 | 
			
		||||
     public:\
 | 
			
		||||
@@ -263,6 +277,12 @@ $range k 0..n-1
 | 
			
		||||
    }\
 | 
			
		||||
    GMOCK_INTERNAL_DEFN_##value_params\
 | 
			
		||||
  };\
 | 
			
		||||
  template <GMOCK_INTERNAL_DECL_##template_params\
 | 
			
		||||
            GMOCK_INTERNAL_DECL_TYPE_##value_params>\
 | 
			
		||||
  GMOCK_ACTION_CLASS_(name, value_params)<\
 | 
			
		||||
      GMOCK_INTERNAL_LIST_##template_params\
 | 
			
		||||
      GMOCK_INTERNAL_LIST_TYPE_##value_params> name(\
 | 
			
		||||
          GMOCK_INTERNAL_DECL_##value_params) GTEST_MUST_USE_RESULT_;\
 | 
			
		||||
  template <GMOCK_INTERNAL_DECL_##template_params\
 | 
			
		||||
            GMOCK_INTERNAL_DECL_TYPE_##value_params>\
 | 
			
		||||
  inline GMOCK_ACTION_CLASS_(name, value_params)<\
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user