mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2025-01-15 20:51:35 +00:00
[clang-tidy] Do not dereference a null BaseType
Check BaseType before dereference. Simplified test case is derived from Android Open Source code. Differential Revision: https://reviews.llvm.org/D33430 llvm-svn: 303645
This commit is contained in:
parent
af3d4db64b
commit
2857b1245b
@ -40,6 +40,8 @@ AST_MATCHER(QualType, isEnableIf) {
|
||||
if (const auto *Dependent = BaseType->getAs<DependentNameType>()) {
|
||||
BaseType = Dependent->getQualifier()->getAsType();
|
||||
}
|
||||
if (!BaseType)
|
||||
return false;
|
||||
if (CheckTemplate(BaseType->getAs<TemplateSpecializationType>())) {
|
||||
return true; // Case: enable_if_t< >.
|
||||
} else if (const auto *Elaborated = BaseType->getAs<ElaboratedType>()) {
|
||||
|
@ -121,3 +121,25 @@ public:
|
||||
private:
|
||||
Test6(const Test6 &rhs);
|
||||
};
|
||||
|
||||
// Do not dereference a null BaseType.
|
||||
template <class _Callable> class result_of;
|
||||
template <class _Fp, class ..._Args> class result_of<_Fp(_Args...)> { };
|
||||
template <class _Tp> using result_of_t = typename result_of<_Tp>::type;
|
||||
|
||||
template <class... _Types> struct __overload;
|
||||
template <class _Tp, class... _Types>
|
||||
struct __overload<_Tp, _Types...> : __overload<_Types...> {
|
||||
using __overload<_Types...>::operator();
|
||||
};
|
||||
|
||||
template <class _Tp, class... _Types>
|
||||
using __best_match_t = typename result_of_t<__overload<_Types...>(_Tp&&)>::type;
|
||||
|
||||
template <class... _Types>
|
||||
class variant {
|
||||
public:
|
||||
template <class _Arg, class _Tp = __best_match_t<_Arg, _Types...> >
|
||||
constexpr variant(_Arg&& __arg) {}
|
||||
// CHECK-MESSAGES: :[[@LINE-1]]:13: warning: constructor accepting a forwarding reference can hide the copy and move constructors
|
||||
};
|
||||
|
Loading…
x
Reference in New Issue
Block a user