]> granicus.if.org Git - clang/commitdiff
[analyzer] Forward arguments in registerChecker to avoid accidental copies
authorGeorge Karpenkov <ekarpenkov@apple.com>
Thu, 2 Aug 2018 18:17:01 +0000 (18:17 +0000)
committerGeorge Karpenkov <ekarpenkov@apple.com>
Thu, 2 Aug 2018 18:17:01 +0000 (18:17 +0000)
Differential Revision: https://reviews.llvm.org/D50108

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@338753 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/StaticAnalyzer/Core/CheckerManager.h

index 7c353326be46e08c1b579ac8ab4204c62f8b53bc..ea2952b3b1149d87f90a502ff87a0ef213e5e30c 100644 (file)
@@ -149,13 +149,13 @@ public:
   ///
   /// \returns a pointer to the checker object.
   template <typename CHECKER, typename... AT>
-  CHECKER *registerChecker(AT... Args) {
+  CHECKER *registerChecker(AT &&... Args) {
     CheckerTag tag = getTag<CHECKER>();
     CheckerRef &ref = CheckerTags[tag];
     if (ref)
       return static_cast<CHECKER *>(ref); // already registered.
 
-    CHECKER *checker = new CHECKER(Args...);
+    CHECKER *checker = new CHECKER(std::forward<AT>(Args)...);
     checker->Name = CurrentCheckName;
     CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>));
     CHECKER::_register(checker, *this);