recog: Tweak insn_gen_fn::operator() definition
authorRichard Sandiford <richard.sandiford@arm.com>
Wed, 17 Jun 2020 16:45:29 +0000 (17:45 +0100)
committerRichard Sandiford <richard.sandiford@arm.com>
Wed, 17 Jun 2020 16:45:29 +0000 (17:45 +0100)
Fixes a “left operand of comma has no effect” warning that some were
seeing.  Also fixes a spurious ellipsis that Jonathan Wakely pointed
out.

2020-06-17  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
* coretypes.h (first_type): New alias template.
* recog.h (insn_gen_fn::operator()): Use it instead of a decltype.
Remove spurious “...” and split the function type out into a typedef.

gcc/coretypes.h
gcc/recog.h

index cda22697cc39debc0a6be793a2bf6f2b104dd2d3..01ec2e23ce28711612e2f82e8e0d70cf5a23dda0 100644 (file)
@@ -359,6 +359,10 @@ struct kv_pair
   const ValueType value;       /* the value of the name */
 };
 
+/* Alias of the first type, ignoring the second.  */
+template<typename T1, typename T2>
+using first_type = T1;
+
 #else
 
 struct _dont_use_rtx_here_;
index 0a71a02c4a9b9d3b2154459a6b6f36f791ff78e8..d674d384723a8933a9e317d938df6b645cd6c7be 100644 (file)
@@ -295,9 +295,10 @@ struct insn_gen_fn
   typedef void (*stored_funcptr) (void);
 
   template<typename ...Ts>
-  rtx_insn *operator() (Ts... args...) const
+  rtx_insn *operator() (Ts... args) const
   {
-    return ((rtx_insn *(*) (decltype(args, NULL_RTX)...)) func) (args...);
+    typedef rtx_insn *(*funcptr) (first_type<rtx, Ts>...);
+    return ((funcptr) func) (args...);
   }
 
   // This is for compatibility of code that invokes functions like