forked from OSchip/llvm-project
Suppress -Wwarn-unused-variables when we don't know the constructor
This warning is supposed to be suppressed when the constructor/destructor are non-trivial, since it might be a RAII type. However, if the type has a trivial destructor and the constructor hasn't been resolved (since it is called with dependent arguments), we were still warning. This patch suppresses the warning if the type could possibly have a be a non-trivial constructor call. Note that this does not take the arity of the constructors into consideration, so it might suppress the warning in cases where it isn't possible to call a non-trivial constructor.
This commit is contained in:
parent
61368c8e98
commit
654c0daef7
|
@ -1805,6 +1805,13 @@ static bool ShouldDiagnoseUnusedDecl(const NamedDecl *D) {
|
||||||
(VD->getInit()->isValueDependent() || !VD->evaluateValue()))
|
(VD->getInit()->isValueDependent() || !VD->evaluateValue()))
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Suppress the warning if we don't know how this is constructed, and
|
||||||
|
// it could possibly be non-trivial constructor.
|
||||||
|
if (Init->isTypeDependent())
|
||||||
|
for (const CXXConstructorDecl *Ctor : RD->ctors())
|
||||||
|
if (!Ctor->isTrivial())
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -238,4 +238,18 @@ void c() {
|
||||||
a d(b::e ? "" : "");
|
a d(b::e ? "" : "");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Ensure we don't warn on dependent constructor calls.
|
||||||
|
namespace dependent_ctor {
|
||||||
|
struct S {
|
||||||
|
S() = default;
|
||||||
|
S(const S &) = default;
|
||||||
|
S(int);
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
void foo(T &t) {
|
||||||
|
S s{t};
|
||||||
|
}
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue