Explicitly pass reference in hb_auto_t constructor

Fixes clang bots as well as fuzzer issue.
This commit is contained in:
Behdad Esfahbod 2018-08-28 11:02:00 -07:00
parent a268068010
commit 2dde6c803a
1 changed files with 8 additions and 1 deletions

View File

@ -492,7 +492,14 @@ template <typename Type>
struct hb_auto_t : Type
{
hb_auto_t (void) { Type::init (); }
template <typename T1> 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 <typename T1> hb_auto_t (T1 *t1) { Type::init (t1); }
template <typename T1> hb_auto_t (T1 &t1) { Type::init (t1); }
~hb_auto_t (void) { Type::fini (); }
private: /* Hide */
void init (void) {}