aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHaojian Wu <hokein.wu@gmail.com>2022-08-06 23:34:02 +0200
committerHaojian Wu <hokein.wu@gmail.com>2022-08-07 16:53:56 +0200
commit82439b201a01707fd18f0d34a4b625132b9c7304 (patch)
treeec6910f91a52b562ad41fc5c4b8f3a0a79d7eb31
parent32fd0b7fd5ab26a70be1a16846232055e92cb597 (diff)
[clang-tidy] Fix a forwarding-reference-overload crash after the
ElaboratedType change. After 15f3cd6bfc670ba6106184a903eb04be059e5977, the nss of ElaboratedType can be null.
-rw-r--r--clang-tools-extra/clang-tidy/bugprone/ForwardingReferenceOverloadCheck.cpp9
-rw-r--r--clang-tools-extra/test/clang-tidy/checkers/bugprone/forwarding-reference-overload.cpp11
2 files changed, 16 insertions, 4 deletions
diff --git a/clang-tools-extra/clang-tidy/bugprone/ForwardingReferenceOverloadCheck.cpp b/clang-tools-extra/clang-tidy/bugprone/ForwardingReferenceOverloadCheck.cpp
index 568f139bdb85..2f9946a7cc1b 100644
--- a/clang-tools-extra/clang-tidy/bugprone/ForwardingReferenceOverloadCheck.cpp
+++ b/clang-tools-extra/clang-tidy/bugprone/ForwardingReferenceOverloadCheck.cpp
@@ -44,11 +44,12 @@ AST_MATCHER(QualType, isEnableIf) {
if (CheckTemplate(BaseType->getAs<TemplateSpecializationType>()))
return true; // Case: enable_if_t< >.
if (const auto *Elaborated = BaseType->getAs<ElaboratedType>()) {
- if (const auto *Qualifier = Elaborated->getQualifier()->getAsType()) {
- if (CheckTemplate(Qualifier->getAs<TemplateSpecializationType>())) {
- return true; // Case: enable_if< >::type.
+ if (const auto *Q = Elaborated->getQualifier())
+ if (const auto *Qualifier = Q->getAsType()) {
+ if (CheckTemplate(Qualifier->getAs<TemplateSpecializationType>())) {
+ return true; // Case: enable_if< >::type.
+ }
}
- }
}
return false;
}
diff --git a/clang-tools-extra/test/clang-tidy/checkers/bugprone/forwarding-reference-overload.cpp b/clang-tools-extra/test/clang-tidy/checkers/bugprone/forwarding-reference-overload.cpp
index 920029b56e55..38b0691bc9f1 100644
--- a/clang-tools-extra/test/clang-tidy/checkers/bugprone/forwarding-reference-overload.cpp
+++ b/clang-tools-extra/test/clang-tidy/checkers/bugprone/forwarding-reference-overload.cpp
@@ -240,3 +240,14 @@ public:
Test9(const Test9 &other) = default;
Test9(Test9 &&other) = default;
};
+
+
+template <typename T>
+class Test10 {
+public:
+ enum E {};
+ E e;
+
+ Test10(T &&Item, E e)
+ : e(e){}
+};