From: Erik Pilkington Date: Tue, 31 Jul 2018 00:18:30 +0000 (+0000) Subject: [Sema] Relax a failing assert in TemplateArgumentLoc X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=8dd04ba1ad282d601913b1212c131770bffa7b0f;p=clang [Sema] Relax a failing assert in TemplateArgumentLoc Any of these template argument kinds can be represented with an expression, so accept them in this constructor. Patch by Balaji Iyer! rdar://41459965 Differential revision: https://reviews.llvm.org/D49766 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@338338 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/AST/TemplateBase.h b/include/clang/AST/TemplateBase.h index 90af51b454..6898ef4e1b 100644 --- a/include/clang/AST/TemplateBase.h +++ b/include/clang/AST/TemplateBase.h @@ -465,7 +465,13 @@ public: TemplateArgumentLoc(const TemplateArgument &Argument, Expr *E) : Argument(Argument), LocInfo(E) { - assert(Argument.getKind() == TemplateArgument::Expression); + + // Permit any kind of template argument that can be represented with an + // expression + assert(Argument.getKind() == TemplateArgument::NullPtr || + Argument.getKind() == TemplateArgument::Integral || + Argument.getKind() == TemplateArgument::Declaration || + Argument.getKind() == TemplateArgument::Expression); } TemplateArgumentLoc(const TemplateArgument &Argument, diff --git a/test/SemaObjCXX/class-templ-error-null-init.mm b/test/SemaObjCXX/class-templ-error-null-init.mm new file mode 100644 index 0000000000..b621a3ab24 --- /dev/null +++ b/test/SemaObjCXX/class-templ-error-null-init.mm @@ -0,0 +1,7 @@ +// RUN: %clang_cc1 -fsyntax-only -std=c++17 -verify %s +// expected-no-diagnostics +template +struct e { + e(a) {} +}; +e c(0);