Author: Shoaib Meenai Date: 2020-01-27T11:50:25-08:00 New Revision: c72a6ac4b630d2344dbea44a7d75fa61795dcd76
URL: https://github.com/llvm/llvm-project/commit/c72a6ac4b630d2344dbea44a7d75fa61795dcd76 DIFF: https://github.com/llvm/llvm-project/commit/c72a6ac4b630d2344dbea44a7d75fa61795dcd76.diff LOG: Revert "[clang-tidy] readability-identifier-naming disregards parameters restrictions on main like functions" This reverts commit 27e3671ff49b72640f89c34a415412e400503442. This was an accidental push, and the author requested a revert on IRC as their local branch is in a bad state. Added: Modified: clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.h clang-tools-extra/clang-tidy/utils/RenamerClangTidyCheck.cpp clang-tools-extra/docs/ReleaseNotes.rst clang-tools-extra/docs/clang-tidy/checks/readability-identifier-naming.rst clang-tools-extra/test/clang-tidy/checkers/readability-identifier-naming-member-decl-usage.cpp Removed: clang-tools-extra/test/clang-tidy/checkers/readability-identifier-naming-main-like.cpp ################################################################################ diff --git a/clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp b/clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp index 119502e91ffe..6a39ece09777 100644 --- a/clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp +++ b/clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp @@ -8,13 +8,15 @@ #include "IdentifierNamingCheck.h" +#include "../utils/ASTUtils.h" +#include "clang/ASTMatchers/ASTMatchFinder.h" #include "clang/AST/CXXInheritance.h" +#include "clang/Frontend/CompilerInstance.h" #include "clang/Lex/PPCallbacks.h" #include "clang/Lex/Preprocessor.h" #include "llvm/ADT/DenseMapInfo.h" #include "llvm/Support/Debug.h" #include "llvm/Support/Format.h" -#include "llvm/Support/Regex.h" #define DEBUG_TYPE "clang-tidy" @@ -124,9 +126,7 @@ class IdentifierNamingCheckPPCallbacks : public PPCallbacks { IdentifierNamingCheck::IdentifierNamingCheck(StringRef Name, ClangTidyContext *Context) - : RenamerClangTidyCheck(Name, Context), - IgnoreFailedSplit(Options.get("IgnoreFailedSplit", 0)), - IgnoreMainLikeFunctions(Options.get("IgnoreMainLikeFunctions", 0)) { + : RenamerClangTidyCheck(Name, Context) { auto const fromString = [](StringRef Str) { return llvm::StringSwitch<llvm::Optional<CaseType>>(Str) .Case("aNy_CasE", CT_AnyCase) @@ -151,6 +151,8 @@ IdentifierNamingCheck::IdentifierNamingCheck(StringRef Name, NamingStyles.push_back(llvm::None); } } + + IgnoreFailedSplit = Options.get("IgnoreFailedSplit", 0); } IdentifierNamingCheck::~IdentifierNamingCheck() = default; @@ -191,7 +193,6 @@ void IdentifierNamingCheck::storeOptions(ClangTidyOptions::OptionMap &Opts) { } Options.store(Opts, "IgnoreFailedSplit", IgnoreFailedSplit); - Options.store(Opts, "IgnoreMainLikeFunctions", IgnoreMainLikeFunctions); } static bool matchesStyle(StringRef Name, @@ -323,67 +324,6 @@ static std::string fixupWithCase(StringRef Name, return Fixup; } -static bool isParamInMainLikeFunction(const ParmVarDecl &ParmDecl, - bool IncludeMainLike) { - const auto *FDecl = - dyn_cast_or_null<FunctionDecl>(ParmDecl.getParentFunctionOrMethod()); - if (!FDecl) - return false; - if (FDecl->isMain()) - return true; - if (!IncludeMainLike) - return false; - if (FDecl->getAccess() != AS_public && FDecl->getAccess() != AS_none) - return false; - enum MainType { None, Main, WMain }; - auto IsCharPtrPtr = [](QualType QType) -> MainType { - if (QType.isNull()) - return None; - if (QType = QType->getPointeeType(), QType.isNull()) - return None; - if (QType = QType->getPointeeType(), QType.isNull()) - return None; - if (QType->isCharType()) - return Main; - if (QType->isWideCharType()) - return WMain; - return None; - }; - auto IsIntType = [](QualType QType) { - if (QType.isNull()) - return false; - if (const auto *Builtin = - dyn_cast<BuiltinType>(QType->getUnqualifiedDesugaredType())) { - return Builtin->getKind() == BuiltinType::Int; - } - return false; - }; - if (!IsIntType(FDecl->getReturnType())) - return false; - if (FDecl->getNumParams() < 2 || FDecl->getNumParams() > 3) - return false; - if (!IsIntType(FDecl->parameters()[0]->getType())) - return false; - MainType Type = IsCharPtrPtr(FDecl->parameters()[1]->getType()); - if (Type == None) - return false; - if (FDecl->getNumParams() == 3 && - IsCharPtrPtr(FDecl->parameters()[2]->getType()) != Type) - return false; - - if (Type == Main) { - static llvm::Regex Matcher( - "(^[Mm]ain([_A-Z]|$))|([a-z0-9_]Main([_A-Z]|$))|(_main(_|$))"); - assert(Matcher.isValid() && "Invalid Matcher for main like functions."); - return Matcher.match(FDecl->getName()); - } else { - static llvm::Regex Matcher("(^((W[Mm])|(wm))ain([_A-Z]|$))|([a-z0-9_]W[Mm]" - "ain([_A-Z]|$))|(_wmain(_|$))"); - assert(Matcher.isValid() && "Invalid Matcher for wmain like functions."); - return Matcher.match(FDecl->getName()); - } -} - static std::string fixupWithStyle(StringRef Name, const IdentifierNamingCheck::NamingStyle &Style) { @@ -398,8 +338,7 @@ fixupWithStyle(StringRef Name, static StyleKind findStyleKind( const NamedDecl *D, const std::vector<llvm::Optional<IdentifierNamingCheck::NamingStyle>> - &NamingStyles, - bool IgnoreMainLikeFunctions) { + &NamingStyles) { assert(D && D->getIdentifier() && !D->getName().empty() && !D->isImplicit() && "Decl must be an explicit identifier with a name."); @@ -495,8 +434,6 @@ static StyleKind findStyleKind( } if (const auto *Decl = dyn_cast<ParmVarDecl>(D)) { - if (isParamInMainLikeFunction(*Decl, IgnoreMainLikeFunctions)) - return SK_Invalid; QualType Type = Decl->getType(); if (Decl->isConstexpr() && NamingStyles[SK_ConstexprVariable]) @@ -678,7 +615,7 @@ static StyleKind findStyleKind( llvm::Optional<RenamerClangTidyCheck::FailureInfo> IdentifierNamingCheck::GetDeclFailureInfo(const NamedDecl *Decl, const SourceManager &SM) const { - StyleKind SK = findStyleKind(Decl, NamingStyles, IgnoreMainLikeFunctions); + StyleKind SK = findStyleKind(Decl, NamingStyles); if (SK == SK_Invalid) return None; diff --git a/clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.h b/clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.h index 04bf53fe16b5..86cd52f5e751 100644 --- a/clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.h +++ b/clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.h @@ -70,8 +70,7 @@ class IdentifierNamingCheck final : public RenamerClangTidyCheck { const NamingCheckFailure &Failure) const override; std::vector<llvm::Optional<NamingStyle>> NamingStyles; - const bool IgnoreFailedSplit; - const bool IgnoreMainLikeFunctions; + bool IgnoreFailedSplit; }; } // namespace readability diff --git a/clang-tools-extra/clang-tidy/utils/RenamerClangTidyCheck.cpp b/clang-tools-extra/clang-tidy/utils/RenamerClangTidyCheck.cpp index 33c01d7cfefe..dfcd0818ea95 100644 --- a/clang-tools-extra/clang-tidy/utils/RenamerClangTidyCheck.cpp +++ b/clang-tools-extra/clang-tidy/utils/RenamerClangTidyCheck.cpp @@ -14,6 +14,8 @@ #include "clang/Lex/PPCallbacks.h" #include "clang/Lex/Preprocessor.h" #include "llvm/ADT/DenseMapInfo.h" +#include "llvm/Support/Debug.h" +#include "llvm/Support/Format.h" #define DEBUG_TYPE "clang-tidy" @@ -104,22 +106,20 @@ void RenamerClangTidyCheck::registerMatchers(MatchFinder *Finder) { this); Finder->addMatcher(typeLoc().bind("typeLoc"), this); Finder->addMatcher(nestedNameSpecifierLoc().bind("nestedNameLoc"), this); - auto MemberOrDependent = - expr(eachOf(memberExpr().bind("memberExpr"), - cxxDependentScopeMemberExpr().bind("depMemberExpr"))); Finder->addMatcher( functionDecl(unless(cxxMethodDecl(isImplicit())), - hasBody(forEachDescendant(MemberOrDependent))), + hasBody(forEachDescendant(memberExpr().bind("memberExpr")))), this); Finder->addMatcher( - cxxConstructorDecl(unless(isImplicit()), - forEachConstructorInitializer(allOf( - isWritten(), withInitializer(forEachDescendant( - MemberOrDependent))))), - this); - Finder->addMatcher( - fieldDecl(hasInClassInitializer(forEachDescendant(MemberOrDependent))), + cxxConstructorDecl( + unless(isImplicit()), + forEachConstructorInitializer( + allOf(isWritten(), withInitializer(forEachDescendant( + memberExpr().bind("memberExpr")))))), this); + Finder->addMatcher(fieldDecl(hasInClassInitializer( + forEachDescendant(memberExpr().bind("memberExpr")))), + this); } void RenamerClangTidyCheck::registerPPCallbacks( @@ -271,39 +271,6 @@ void RenamerClangTidyCheck::check(const MatchFinder::MatchResult &Result) { return; } - if (const auto *DepMemberRef = - Result.Nodes.getNodeAs<CXXDependentScopeMemberExpr>( - "depMemberExpr")) { - QualType BaseType = DepMemberRef->isArrow() - ? DepMemberRef->getBaseType()->getPointeeType() - : DepMemberRef->getBaseType(); - if (BaseType.isNull()) - return; - const CXXRecordDecl *Base = BaseType.getTypePtr()->getAsCXXRecordDecl(); - if (!Base) - return; - DeclarationName DeclName = DepMemberRef->getMemberNameInfo().getName(); - if (!DeclName.isIdentifier()) - return; - StringRef DependentName = DeclName.getAsIdentifierInfo()->getName(); - for (const FieldDecl *Field : Base->fields()) { - if (Field->getParent() == Base && Field->getDeclName().isIdentifier() && - Field->getName().equals(DependentName)) { - SourceRange Range = DepMemberRef->getMemberNameInfo().getSourceRange(); - addUsage(NamingCheckFailures, Field, Range, Result.SourceManager); - return; - } - } - for (const CXXMethodDecl *Method : Base->methods()) { - if (Method->getParent() == Base && Method->getDeclName().isIdentifier() && - Method->getName().equals(DependentName)) { - SourceRange Range = DepMemberRef->getMemberNameInfo().getSourceRange(); - addUsage(NamingCheckFailures, Method, Range, Result.SourceManager); - return; - } - } - } - if (const auto *Decl = Result.Nodes.getNodeAs<NamedDecl>("decl")) { if (!Decl->getIdentifier() || Decl->getName().empty() || Decl->isImplicit()) return; diff --git a/clang-tools-extra/docs/ReleaseNotes.rst b/clang-tools-extra/docs/ReleaseNotes.rst index 15f0b3ad0fb5..196ab3fe8c11 100644 --- a/clang-tools-extra/docs/ReleaseNotes.rst +++ b/clang-tools-extra/docs/ReleaseNotes.rst @@ -104,11 +104,6 @@ New aliases Changes in existing checks ^^^^^^^^^^^^^^^^^^^^^^^^^^ -- Improved :doc:'readability-identifier-naming - <clang-tidy/checks/readability-identifier-naming>` check. - - Now able to rename member references in class template definitions with - explicit access. Renamed checks ^^^^^^^^^^^^^^ diff --git a/clang-tools-extra/docs/clang-tidy/checks/readability-identifier-naming.rst b/clang-tools-extra/docs/clang-tidy/checks/readability-identifier-naming.rst index 0998bf28c278..c419b0304d4b 100644 --- a/clang-tools-extra/docs/clang-tidy/checks/readability-identifier-naming.rst +++ b/clang-tools-extra/docs/clang-tidy/checks/readability-identifier-naming.rst @@ -55,7 +55,6 @@ The following options are describe below: - :option:`GlobalFunctionCase`, :option:`GlobalFunctionPrefix`, :option:`GlobalFunctionSuffix` - :option:`GlobalPointerCase`, :option:`GlobalPointerPrefix`, :option:`GlobalPointerSuffix` - :option:`GlobalVariableCase`, :option:`GlobalVariablePrefix`, :option:`GlobalVariableSuffix` - - :option:`IgnoreMainLikeFunctions` - :option:`InlineNamespaceCase`, :option:`InlineNamespacePrefix`, :option:`InlineNamespaceSuffix` - :option:`LocalConstantCase`, :option:`LocalConstantPrefix`, :option:`LocalConstantSuffix` - :option:`LocalConstantPointerCase`, :option:`LocalConstantPointerPrefix`, :option:`LocalConstantPointerSuffix` @@ -828,12 +827,6 @@ After: int pre_global3_post; -.. option:: IgnoreMainLikeFunctions - - When set to `1` functions that have a similar signature to ``main`` or - ``wmain`` won't enforce checks on the names of their parameters. - Default value is `0`. - .. option:: InlineNamespaceCase When defined, the check will ensure inline namespaces names conform to the diff --git a/clang-tools-extra/test/clang-tidy/checkers/readability-identifier-naming-main-like.cpp b/clang-tools-extra/test/clang-tidy/checkers/readability-identifier-naming-main-like.cpp deleted file mode 100644 index 6336ffb6b1ff..000000000000 --- a/clang-tools-extra/test/clang-tidy/checkers/readability-identifier-naming-main-like.cpp +++ /dev/null @@ -1,88 +0,0 @@ -// RUN: %check_clang_tidy %s readability-identifier-naming %t -- \ -// RUN: -config='{CheckOptions: [ \ -// RUN: {key: readability-identifier-naming.ParameterCase, value: CamelCase}, \ -// RUN: {key: readability-identifier-naming.IgnoreMainLikeFunctions, value: 1} \ -// RUN: ]}' - -int mainLike(int argc, char **argv); -int mainLike(int argc, char **argv, const char **env); -int mainLike(int argc, const char **argv); -int mainLike(int argc, const char **argv, const char **env); -int mainLike(int argc, char *argv[]); -int mainLike(int argc, const char *argv[]); -int mainLike(int argc, char *argv[], char *env[]); -int mainLike(int argc, const char *argv[], const char *env[]); -void notMain(int argc, char **argv); -// CHECK-MESSAGES: :[[@LINE-1]]:18: warning: invalid case style for parameter 'argc' -// CHECK-MESSAGES: :[[@LINE-2]]:31: warning: invalid case style for parameter 'argv' -void notMain(int argc, char **argv, char **env); -// CHECK-MESSAGES: :[[@LINE-1]]:18: warning: invalid case style for parameter 'argc' -// CHECK-MESSAGES: :[[@LINE-2]]:31: warning: invalid case style for parameter 'argv' -// CHECK-MESSAGES: :[[@LINE-3]]:44: warning: invalid case style for parameter 'env' -int notMain(int argc, char **argv, char **env, int Extra); -// CHECK-MESSAGES: :[[@LINE-1]]:17: warning: invalid case style for parameter 'argc' -// CHECK-MESSAGES: :[[@LINE-2]]:30: warning: invalid case style for parameter 'argv' -// CHECK-MESSAGES: :[[@LINE-3]]:43: warning: invalid case style for parameter 'env' -int notMain(int argc, char **argv, int Extra); -// CHECK-MESSAGES: :[[@LINE-1]]:17: warning: invalid case style for parameter 'argc' -// CHECK-MESSAGES: :[[@LINE-2]]:30: warning: invalid case style for parameter 'argv' -int notMain(int argc, char *argv); -// CHECK-MESSAGES: :[[@LINE-1]]:17: warning: invalid case style for parameter 'argc' -// CHECK-MESSAGES: :[[@LINE-2]]:29: warning: invalid case style for parameter 'argv' -int notMain(unsigned argc, char **argv); -// CHECK-MESSAGES: :[[@LINE-1]]:22: warning: invalid case style for parameter 'argc' -// CHECK-MESSAGES: :[[@LINE-2]]:35: warning: invalid case style for parameter 'argv' -int notMain(long argc, char *argv); -// CHECK-MESSAGES: :[[@LINE-1]]:18: warning: invalid case style for parameter 'argc' -// CHECK-MESSAGES: :[[@LINE-2]]:30: warning: invalid case style for parameter 'argv' -int notMain(int argc, char16_t **argv); -// CHECK-MESSAGES: :[[@LINE-1]]:17: warning: invalid case style for parameter 'argc' -// CHECK-MESSAGES: :[[@LINE-2]]:34: warning: invalid case style for parameter 'argv' -int notMain(int argc, char argv[]); -// CHECK-MESSAGES: :[[@LINE-1]]:17: warning: invalid case style for parameter 'argc' -// CHECK-MESSAGES: :[[@LINE-2]]:28: warning: invalid case style for parameter 'argv' -typedef char myFunChar; -typedef int myFunInt; -typedef char **myFunCharPtr; -typedef long myFunLong; -myFunInt mainLikeTypedef(myFunInt argc, myFunChar **argv); -int mainLikeTypedef(int argc, myFunCharPtr argv); -int notMainTypedef(myFunLong argc, char **argv); -// CHECK-MESSAGES: :[[@LINE-1]]:30: warning: invalid case style for parameter 'argc' -// CHECK-MESSAGES: :[[@LINE-2]]:43: warning: invalid case style for parameter 'argv' - -// Don't flag as name contains the word main -int myMainFunction(int argc, char *argv[]); - -// This is fine, named with wmain and has wchar ptr. -int wmainLike(int argc, wchar_t *argv[]); - -// Flag this as has signature of main, but named as wmain. -int wmainLike(int argc, char *argv[]); -// CHECK-MESSAGES: :[[@LINE-1]]:19: warning: invalid case style for parameter 'argc' -// CHECK-MESSAGES: :[[@LINE-2]]:31: warning: invalid case style for parameter 'argv' - -struct Foo { - Foo(int argc, char *argv[]) {} - // CHECK-MESSAGES: :[[@LINE-1]]:11: warning: invalid case style for parameter 'argc' - // CHECK-MESSAGES: :[[@LINE-2]]:23: warning: invalid case style for parameter 'argv' - - int mainPub(int argc, char *argv[]); - static int mainPubStatic(int argc, char *argv[]); - -protected: - int mainProt(int argc, char *argv[]); - // CHECK-MESSAGES: :[[@LINE-1]]:20: warning: invalid case style for parameter 'argc' - // CHECK-MESSAGES: :[[@LINE-2]]:32: warning: invalid case style for parameter 'argv' - static int mainProtStatic(int argc, char *argv[]); - // CHECK-MESSAGES: :[[@LINE-1]]:33: warning: invalid case style for parameter 'argc' - // CHECK-MESSAGES: :[[@LINE-2]]:45: warning: invalid case style for parameter 'argv' - -private: - int mainPriv(int argc, char *argv[]); - // CHECK-MESSAGES: :[[@LINE-1]]:20: warning: invalid case style for parameter 'argc' - // CHECK-MESSAGES: :[[@LINE-2]]:32: warning: invalid case style for parameter 'argv' - static int mainPrivStatic(int argc, char *argv[]); - // CHECK-MESSAGES: :[[@LINE-1]]:33: warning: invalid case style for parameter 'argc' - // CHECK-MESSAGES: :[[@LINE-2]]:45: warning: invalid case style for parameter 'argv' -}; diff --git a/clang-tools-extra/test/clang-tidy/checkers/readability-identifier-naming-member-decl-usage.cpp b/clang-tools-extra/test/clang-tidy/checkers/readability-identifier-naming-member-decl-usage.cpp index 4e9234d2c793..177b3e2116a8 100644 --- a/clang-tools-extra/test/clang-tidy/checkers/readability-identifier-naming-member-decl-usage.cpp +++ b/clang-tools-extra/test/clang-tidy/checkers/readability-identifier-naming-member-decl-usage.cpp @@ -1,8 +1,7 @@ // RUN: %check_clang_tidy %s readability-identifier-naming %t -- \ // RUN: -config='{CheckOptions: [ \ // RUN: {key: readability-identifier-naming.MemberCase, value: CamelCase}, \ -// RUN: {key: readability-identifier-naming.ParameterCase, value: CamelCase}, \ -// RUN: {key: readability-identifier-naming.MethodCase, value: camelBack} \ +// RUN: {key: readability-identifier-naming.ParameterCase, value: CamelCase} \ // RUN: ]}' -- -fno-delayed-template-parsing int set_up(int); @@ -84,12 +83,12 @@ class vector { //NOLINT }; //NOLINT }; // namespace std -class Foo { +class Foo { std::vector<bool> &stack; // CHECK-MESSAGES: :[[@LINE-1]]:22: warning: invalid case style for member 'stack' [readability-identifier-naming] public: Foo(std::vector<bool> &stack) - // CHECK-MESSAGES: :[[@LINE-1]]:26: warning: invalid case style for parameter 'stack' [readability-identifier-naming] + // CHECK-MESSAGES: :[[@LINE-1]]:26: warning: invalid case style for parameter 'stack' [readability-identifier-naming] // CHECK-FIXES: {{^}} Foo(std::vector<bool> &Stack) : stack(stack) { // CHECK-FIXES: {{^}} : Stack(Stack) { @@ -135,94 +134,4 @@ class Container { void foo() { Container<int, 5> container; } -} // namespace CtorInits - -namespace resolved_dependance { -template <typename T> -struct A0 { - int value; - // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: invalid case style for member 'value' - A0 &operator=(const A0 &Other) { - value = Other.value; // A0 - this->value = Other.value; // A0 - // CHECK-FIXES: {{^}} Value = Other.Value; // A0 - // CHECK-FIXES-NEXT: {{^}} this->Value = Other.Value; // A0 - return *this; - } - void outOfLineReset(); -}; - -template <typename T> -void A0<T>::outOfLineReset() { - this->value -= value; // A0 - // CHECK-FIXES: {{^}} this->Value -= Value; // A0 -} - -template <typename T> -struct A1 { - int value; // A1 - // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: invalid case style for member 'value' - // CHECK-FIXES: {{^}} int Value; // A1 - int GetValue() const { return value; } // A1 - // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: invalid case style for method 'GetValue' - // CHECK-FIXES {{^}} int getValue() const { return Value; } // A1 - void SetValue(int Value) { this->value = Value; } // A1 - // CHECK-MESSAGES: :[[@LINE-1]]:8: warning: invalid case style for method 'SetValue' - // CHECK-FIXES {{^}} void setValue(int Value) { this->Value = Value; } // A1 - A1 &operator=(const A1 &Other) { - this->SetValue(Other.GetValue()); // A1 - this->value = Other.value; // A1 - // CHECK-FIXES: {{^}} this->setValue(Other.getValue()); // A1 - // CHECK-FIXES-NEXT: {{^}} this->Value = Other.Value; // A1 - return *this; - } - void outOfLineReset(); -}; - -template <typename T> -void A1<T>::outOfLineReset() { - this->value -= value; // A1 - // CHECK-FIXES: {{^}} this->Value -= Value; // A1 -} - -template <unsigned T> -struct A2 { - int value; // A2 - // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: invalid case style for member 'value' - // CHECK-FIXES: {{^}} int Value; // A2 - A2 &operator=(const A2 &Other) { - value = Other.value; // A2 - this->value = Other.value; // A2 - // CHECK-FIXES: {{^}} Value = Other.Value; // A2 - // CHECK-FIXES-NEXT: {{^}} this->Value = Other.Value; // A2 - return *this; - } -}; - -// create some instances to check it works when instantiated. -A1<int> AInt{}; -A1<int> BInt = (AInt.outOfLineReset(), AInt); -A1<unsigned> AUnsigned{}; -A1<unsigned> BUnsigned = AUnsigned; -} // namespace resolved_dependance - -namespace unresolved_dependance { -template <typename T> -struct DependentBase { - int depValue; - // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: invalid case style for member 'depValue' -}; - -template <typename T> -struct Derived : DependentBase<T> { - Derived &operator=(const Derived &Other) { - this->depValue = Other.depValue; - // CHECK-FIXES-NOT: {{^}} this->DepValue = Other.DepValue; - return *this; - } -}; - -Derived<int> AInt{}; -Derived<int> BInt = AInt; - -} // namespace unresolved_dependance +}; // namespace CtorInits _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits