This revision was automatically updated to reflect the committed changes. Closed by commit rL338338: [Sema] Relax a failing assert in TemplateArgumentLoc (authored by epilk, committed by ). Herald added a subscriber: llvm-commits.
Changed prior to commit: https://reviews.llvm.org/D49766?vs=157730&id=158138#toc Repository: rL LLVM https://reviews.llvm.org/D49766 Files: cfe/trunk/include/clang/AST/TemplateBase.h cfe/trunk/test/SemaObjCXX/class-templ-error-null-init.mm Index: cfe/trunk/include/clang/AST/TemplateBase.h =================================================================== --- cfe/trunk/include/clang/AST/TemplateBase.h +++ cfe/trunk/include/clang/AST/TemplateBase.h @@ -465,7 +465,13 @@ 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, Index: cfe/trunk/test/SemaObjCXX/class-templ-error-null-init.mm =================================================================== --- cfe/trunk/test/SemaObjCXX/class-templ-error-null-init.mm +++ cfe/trunk/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 <typename a, int* = nullptr> +struct e { + e(a) {} +}; +e c(0);
Index: cfe/trunk/include/clang/AST/TemplateBase.h =================================================================== --- cfe/trunk/include/clang/AST/TemplateBase.h +++ cfe/trunk/include/clang/AST/TemplateBase.h @@ -465,7 +465,13 @@ 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, Index: cfe/trunk/test/SemaObjCXX/class-templ-error-null-init.mm =================================================================== --- cfe/trunk/test/SemaObjCXX/class-templ-error-null-init.mm +++ cfe/trunk/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 <typename a, int* = nullptr> +struct e { + e(a) {} +}; +e c(0);
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits