From 2dde6c803a9e50c5bff74095187b0cb2e12eebdd Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Tue, 28 Aug 2018 11:02:00 -0700 Subject: [PATCH] Explicitly pass reference in hb_auto_t constructor Fixes clang bots as well as fuzzer issue. --- src/hb-dsalgs.hh | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/hb-dsalgs.hh b/src/hb-dsalgs.hh index ec5708eb7..8c910748b 100644 --- a/src/hb-dsalgs.hh +++ b/src/hb-dsalgs.hh @@ -492,7 +492,14 @@ template struct hb_auto_t : Type { hb_auto_t (void) { Type::init (); } - template hb_auto_t (T1 t1) { Type::init (t1); } + /* Explicitly allow the following only for pointer and references, + * to avoid any accidental copies. + * + * Apparently if we template for all types, then gcc seems to + * capture a reference argument in the type, but clang doesn't, + * causing unwanted copies and bugs that come with it. */ + template hb_auto_t (T1 *t1) { Type::init (t1); } + template hb_auto_t (T1 &t1) { Type::init (t1); } ~hb_auto_t (void) { Type::fini (); } private: /* Hide */ void init (void) {}