diff --git a/src/dscanner/analysis/unused_result.d b/src/dscanner/analysis/unused_result.d index b1e987b..85f34a4 100644 --- a/src/dscanner/analysis/unused_result.d +++ b/src/dscanner/analysis/unused_result.d @@ -37,12 +37,16 @@ private: public: const(DSymbol)* void_; + const(DSymbol)* noreturn_; /// this(string fileName, const(Scope)* sc, bool skipTests = false) { super(fileName, sc, skipTests); void_ = sc.getSymbolsByName(internString("void"))[0]; + auto symbols = sc.getSymbolsByName(internString("noreturn")); + if (symbols.length > 0) + noreturn_ = symbols[0]; } override void visit(const(ExpressionStatement) decl) @@ -85,6 +89,8 @@ public: return; if (sym.type is void_) return; + if (noreturn_ && sym.type is noreturn_) + return; } addErrorMessage(decl.expression.line, decl.expression.column, KEY, MSG); @@ -109,6 +115,15 @@ unittest } }c, sac); + assertAnalyzerWarnings(q{ + alias noreturn = typeof(*null); + noreturn fun() { while (1) {} } + noreturn main() + { + fun(); + } + }c, sac); + assertAnalyzerWarnings(q{ int fun() { return 1; } void main()