cor3ntin updated this revision to Diff 412654. cor3ntin added a comment. Fix Formatting.
Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D120881/new/ https://reviews.llvm.org/D120881 Files: clang/include/clang/Basic/DiagnosticSemaKinds.td clang/lib/Sema/SemaDeclCXX.cpp clang/test/SemaCXX/class.cpp Index: clang/test/SemaCXX/class.cpp =================================================================== --- clang/test/SemaCXX/class.cpp +++ clang/test/SemaCXX/class.cpp @@ -208,6 +208,22 @@ } } -struct PR9989 { - static int const PR9989_Member = sizeof PR9989_Member; +struct PR9989 { + static int const PR9989_Member = sizeof PR9989_Member; }; + + +namespace GH54151 { + +struct S { + int i<0>; // expected-error {{member 'i' cannot have template arguments}} + int j<int>; // expected-error {{member 'j' cannot have template arguments}} +}; + +template <typename T, int N> +struct U { + int i<N>; // expected-error {{member 'i' cannot have template arguments}} + int j<T>; // expected-error {{member 'j' cannot have template arguments}} +}; + +} // namespace GH54151 Index: clang/lib/Sema/SemaDeclCXX.cpp =================================================================== --- clang/lib/Sema/SemaDeclCXX.cpp +++ clang/lib/Sema/SemaDeclCXX.cpp @@ -3395,6 +3395,15 @@ return nullptr; } + if (isInstField && + D.getName().getKind() == UnqualifiedIdKind::IK_TemplateId) { + Diag(D.getIdentifierLoc(), diag::err_member_with_template_arguments) + << II + << SourceRange(D.getName().TemplateId->LAngleLoc, + D.getName().TemplateId->RAngleLoc) + << D.getName().TemplateId->LAngleLoc; + } + if (SS.isSet() && !SS.isInvalid()) { // The user provided a superfluous scope specifier inside a class // definition: Index: clang/include/clang/Basic/DiagnosticSemaKinds.td =================================================================== --- clang/include/clang/Basic/DiagnosticSemaKinds.td +++ clang/include/clang/Basic/DiagnosticSemaKinds.td @@ -4790,6 +4790,7 @@ def err_template_variable_noparams : Error< "extraneous 'template<>' in declaration of variable %0">; def err_template_member : Error<"member %0 declared as a template">; +def err_member_with_template_arguments : Error<"member %0 cannot have template arguments">; def err_template_member_noparams : Error< "extraneous 'template<>' in declaration of member %0">; def err_template_tag_noparams : Error<
Index: clang/test/SemaCXX/class.cpp =================================================================== --- clang/test/SemaCXX/class.cpp +++ clang/test/SemaCXX/class.cpp @@ -208,6 +208,22 @@ } } -struct PR9989 { - static int const PR9989_Member = sizeof PR9989_Member; +struct PR9989 { + static int const PR9989_Member = sizeof PR9989_Member; }; + + +namespace GH54151 { + +struct S { + int i<0>; // expected-error {{member 'i' cannot have template arguments}} + int j<int>; // expected-error {{member 'j' cannot have template arguments}} +}; + +template <typename T, int N> +struct U { + int i<N>; // expected-error {{member 'i' cannot have template arguments}} + int j<T>; // expected-error {{member 'j' cannot have template arguments}} +}; + +} // namespace GH54151 Index: clang/lib/Sema/SemaDeclCXX.cpp =================================================================== --- clang/lib/Sema/SemaDeclCXX.cpp +++ clang/lib/Sema/SemaDeclCXX.cpp @@ -3395,6 +3395,15 @@ return nullptr; } + if (isInstField && + D.getName().getKind() == UnqualifiedIdKind::IK_TemplateId) { + Diag(D.getIdentifierLoc(), diag::err_member_with_template_arguments) + << II + << SourceRange(D.getName().TemplateId->LAngleLoc, + D.getName().TemplateId->RAngleLoc) + << D.getName().TemplateId->LAngleLoc; + } + if (SS.isSet() && !SS.isInvalid()) { // The user provided a superfluous scope specifier inside a class // definition: Index: clang/include/clang/Basic/DiagnosticSemaKinds.td =================================================================== --- clang/include/clang/Basic/DiagnosticSemaKinds.td +++ clang/include/clang/Basic/DiagnosticSemaKinds.td @@ -4790,6 +4790,7 @@ def err_template_variable_noparams : Error< "extraneous 'template<>' in declaration of variable %0">; def err_template_member : Error<"member %0 declared as a template">; +def err_member_with_template_arguments : Error<"member %0 cannot have template arguments">; def err_template_member_noparams : Error< "extraneous 'template<>' in declaration of member %0">; def err_template_tag_noparams : Error<
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits