[cfe-dev] Fix for the issue 12176

Jonathan Roelofs via cfe-dev cfe-dev at lists.llvm.org
Thu Sep 28 13:28:44 PDT 2017


+silvas


On 9/28/17 2:19 PM, Oscar Forner Martinez via cfe-commits wrote:
> Hi,
> 
> Please find attached a diff to fix the issue 12176.

Link for the lazy: llvm.org/PR12176

> Let me know if there 
> is anything any improvements you can think of.
> 
> Best regards,
> 
> Oscar
> 
> 
> Extract-getDepthAndIndex-issue-12176.patch
> 
> 
> Index: lib/Sema/DepthAndIndex.h
> ===================================================================
> --- lib/Sema/DepthAndIndex.h	(nonexistent)
> +++ lib/Sema/DepthAndIndex.h	(working copy)
> @@ -0,0 +1,32 @@
> +//===- DepthAndIndex.h - Static declaration of the getDepthAndIndex function -*- C++ -*-===//
> +//
> +//                     The LLVM Compiler Infrastructure
> +//
> +// This file is distributed under the University of Illinois Open Source
> +// License. See LICENSE.TXT for details.
> +//===----------------------------------------------------------------------===//
> +//
> +//  This file defines getDepthAndIndex function.
> +//
> +//===----------------------------------------------------------------------===//
> +
> +#ifndef LLVM_CLANG_LIB_SEMA_DEPTHANDINDEX_H
> +#define LLVM_CLANG_LIB_SEMA_DEPTHANDINDEX_H
> +
> +#include "clang/AST/DeclTemplate.h"
> +#include "clang/Sema/DeclSpec.h"
> +
> +/// \brief Retrieve the depth and index of a template parameter.
> +static std::pair<unsigned, unsigned>

This should be just a declaration and a doxygen comment for it. Drop the 
'static'. You can also drop the "\brief" since autobrief is turned on.

Then the body should go in a *.cpp somewhere in lib/Sema.

> +getDepthAndIndex(NamedDecl *ND) {
> +  if (TemplateTypeParmDecl *TTP = dyn_cast<TemplateTypeParmDecl>(ND))
> +    return std::make_pair(TTP->getDepth(), TTP->getIndex());
> +
> +  if (NonTypeTemplateParmDecl *NTTP = dyn_cast<NonTypeTemplateParmDecl>(ND))
> +    return std::make_pair(NTTP->getDepth(), NTTP->getIndex());
> +
> +  TemplateTemplateParmDecl *TTP = cast<TemplateTemplateParmDecl>(ND);
> +  return std::make_pair(TTP->getDepth(), TTP->getIndex());
> +}
> +
> +#endif // LLVM_CLANG_LIB_SEMA_DEPTHANDINDEX_H
> \ No newline at end of file
> Index: lib/Sema/SemaTemplateDeduction.cpp
> ===================================================================
> --- lib/Sema/SemaTemplateDeduction.cpp	(revision 314321)
> +++ lib/Sema/SemaTemplateDeduction.cpp	(working copy)
> @@ -11,6 +11,7 @@
>   //===----------------------------------------------------------------------===/
>   
>   #include "clang/Sema/TemplateDeduction.h"
> +#include "DepthAndIndex.h"
>   #include "TreeTransform.h"
>   #include "clang/AST/ASTContext.h"
>   #include "clang/AST/ASTLambda.h"
> @@ -579,19 +580,6 @@
>     }
>   }
>   
> -/// \brief Retrieve the depth and index of a template parameter.
> -static std::pair<unsigned, unsigned>
> -getDepthAndIndex(NamedDecl *ND) {
> -  if (TemplateTypeParmDecl *TTP = dyn_cast<TemplateTypeParmDecl>(ND))
> -    return std::make_pair(TTP->getDepth(), TTP->getIndex());
> -
> -  if (NonTypeTemplateParmDecl *NTTP = dyn_cast<NonTypeTemplateParmDecl>(ND))
> -    return std::make_pair(NTTP->getDepth(), NTTP->getIndex());
> -
> -  TemplateTemplateParmDecl *TTP = cast<TemplateTemplateParmDecl>(ND);
> -  return std::make_pair(TTP->getDepth(), TTP->getIndex());
> -}
> -
>   /// \brief Retrieve the depth and index of an unexpanded parameter pack.
>   static std::pair<unsigned, unsigned>
>   getDepthAndIndex(UnexpandedParameterPack UPP) {

Maybe this ^ one should go too?

> Index: lib/Sema/SemaTemplateInstantiate.cpp

snip


Jon

> 
> 
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
> 

-- 
Jon Roelofs
jonathan at codesourcery.com
CodeSourcery / Mentor Embedded / Siemens



More information about the cfe-dev mailing list