diff --git a/CMakeLists.txt b/CMakeLists.txt --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -112,10 +112,12 @@ # Turn off missing-field-initializers warning for GCC to avoid noise from false positives with empty {} # See discussion: http://mail.kde.org/pipermail/kdevelop-devel/2014-February/046910.html add_compile_flag_if_supported(-Wno-missing-field-initializers) +add_compile_flag_if_supported(-Werror=switch) add_compile_flag_if_supported(-Werror=undefined-bool-conversion) add_compile_flag_if_supported(-Werror=tautological-undefined-compare) if (CMAKE_CXX_COMPILER_ID MATCHES "Clang") add_compile_flag_if_supported(-Wdocumentation) + add_compile_flag_if_supported(-Wcovered-switch-default) # This warning is triggered by every call to qCDebug() add_compile_flag_if_supported(-Wno-gnu-zero-variadic-macro-arguments) endif() diff --git a/kdevplatform/debugger/variable/variablecollection.cpp b/kdevplatform/debugger/variable/variablecollection.cpp --- a/kdevplatform/debugger/variable/variablecollection.cpp +++ b/kdevplatform/debugger/variable/variablecollection.cpp @@ -189,8 +189,8 @@ case Octal: return QStringLiteral("octal"); case Decimal: return QStringLiteral("decimal"); case Hexadecimal: return QStringLiteral("hexadecimal"); - default: return QString(); } + return QString(); } diff --git a/kdevplatform/language/duchain/navigation/abstractdeclarationnavigationcontext.cpp b/kdevplatform/language/duchain/navigation/abstractdeclarationnavigationcontext.cpp --- a/kdevplatform/language/duchain/navigation/abstractdeclarationnavigationcontext.cpp +++ b/kdevplatform/language/duchain/navigation/abstractdeclarationnavigationcontext.cpp @@ -568,9 +568,6 @@ case ClassDeclarationData::Trait: modifyHtml() += QStringLiteral("trait "); break; - default: - modifyHtml() += QStringLiteral(" "); - break; } eventuallyMakeTypeLinks( klass.cast() ); diff --git a/kdevplatform/outputview/outputexecutejob.cpp b/kdevplatform/outputview/outputexecutejob.cpp --- a/kdevplatform/outputview/outputexecutejob.cpp +++ b/kdevplatform/outputview/outputexecutejob.cpp @@ -344,7 +344,6 @@ errorValue = i18n("Waiting for the process has timed out"); break; - default: case QProcess::UnknownError: errorValue = i18n("Exit code %1", d->m_process->exitCode()); break; diff --git a/kdevplatform/outputview/outputmodel.cpp b/kdevplatform/outputview/outputmodel.cpp --- a/kdevplatform/outputview/outputmodel.cpp +++ b/kdevplatform/outputview/outputmodel.cpp @@ -423,12 +423,10 @@ case StaticAnalysisFilter: filter = new StaticAnalysisFilterStrategy; break; - default: - // assert(false); - filter = new NoFilterStrategy; - break; } - Q_ASSERT(filter); + if (!filter) { + filter = new NoFilterStrategy; + } QMetaObject::invokeMethod(d->worker, "changeFilterStrategy", Q_ARG(KDevelop::IFilterStrategy*, filter)); diff --git a/kdevplatform/outputview/tests/test_filteringstrategy.cpp b/kdevplatform/outputview/tests/test_filteringstrategy.cpp --- a/kdevplatform/outputview/tests/test_filteringstrategy.cpp +++ b/kdevplatform/outputview/tests/test_filteringstrategy.cpp @@ -63,9 +63,8 @@ return QTest::newRow(QString(QLatin1String(dataTag)+QLatin1String("-windows-ns")).toUtf8().constData()); case WindowsFilePathWithSpaces: return QTest::newRow(QString(QLatin1String(dataTag)+QLatin1String("-windows-ws")).toUtf8().constData()); - default: - return QTest::newRow(dataTag); } + Q_UNREACHABLE(); } } diff --git a/kdevplatform/outputview/tests/testlinebuilderfunctions.h b/kdevplatform/outputview/tests/testlinebuilderfunctions.h --- a/kdevplatform/outputview/tests/testlinebuilderfunctions.h +++ b/kdevplatform/outputview/tests/testlinebuilderfunctions.h @@ -50,10 +50,8 @@ return QStringLiteral("/some/path/to/a/project"); case UnixFilePathWithSpaces: return QStringLiteral("/some/path with spaces/to/a/project"); - default: - Q_ASSERT(0); - return QStringLiteral("/we/should/never/end/up/here"); } + Q_UNREACHABLE(); } QString buildCppCheckErrorLine(TestPathType pathType = UnixFilePathNoSpaces) diff --git a/kdevplatform/project/builderjob.cpp b/kdevplatform/project/builderjob.cpp --- a/kdevplatform/project/builderjob.cpp +++ b/kdevplatform/project/builderjob.cpp @@ -96,9 +96,8 @@ return i18nc( "@info:status", "install" ); case BuilderJob::Prune: return i18nc( "@info:status", "prune" ); - default: - return QString(); } + return QString(); } void BuilderJobPrivate::addJob( BuilderJob::BuildType t, ProjectBaseItem* item ) @@ -138,8 +137,6 @@ j = item->project()->buildSystemManager()->builder()->configure( item->project() ); } break; - default: - break; } if( j ) { diff --git a/plugins/debuggercommon/mi/micommand.cpp b/plugins/debuggercommon/mi/micommand.cpp --- a/plugins/debuggercommon/mi/micommand.cpp +++ b/plugins/debuggercommon/mi/micommand.cpp @@ -146,276 +146,189 @@ QString MICommand::miCommand() const { - QString command; - switch (type()) { case NonMI: - command = QLatin1String(""); - break; + return QStringLiteral("-"); case BreakAfter: - command = QStringLiteral("break-after");//"ignore" - break; + return QStringLiteral("-break-after");//"ignore" case BreakCommands: - command = QStringLiteral("break-commands"); - break; + return QStringLiteral("-break-commands"); case BreakCondition: - command = QStringLiteral("break-condition");//"cond" - break; + return QStringLiteral("-break-condition");//"cond" case BreakDelete: - command = QStringLiteral("break-delete");//"delete breakpoint" - break; + return QStringLiteral("-break-delete");//"delete breakpoint" case BreakDisable: - command = QStringLiteral("break-disable");//"disable breakpoint" - break; + return QStringLiteral("-break-disable");//"disable breakpoint" case BreakEnable: - command = QStringLiteral("break-enable");//"enable breakpoint" - break; + return QStringLiteral("-break-enable");//"enable breakpoint" case BreakInfo: - command = QStringLiteral("break-info");//"info break" - break; + return QStringLiteral("-break-info");//"info break" case BreakInsert: - command = QStringLiteral("break-insert -f"); - break; + return QStringLiteral("-break-insert -f"); case BreakList: - command = QStringLiteral("break-list");//"info break" - break; + return QStringLiteral("-break-list");//"info break" case BreakWatch: - command = QStringLiteral("break-watch"); - break; + return QStringLiteral("-break-watch"); case DataDisassemble: - command = QStringLiteral("data-disassemble"); - break; + return QStringLiteral("-data-disassemble"); case DataEvaluateExpression: - command = QStringLiteral("data-evaluate-expression"); - break; + return QStringLiteral("-data-evaluate-expression"); case DataListChangedRegisters: - command = QStringLiteral("data-list-changed-registers"); - break; + return QStringLiteral("-data-list-changed-registers"); case DataListRegisterNames: - command = QStringLiteral("data-list-register-names"); - break; + return QStringLiteral("-data-list-register-names"); case DataListRegisterValues: - command = QStringLiteral("data-list-register-values"); - break; + return QStringLiteral("-data-list-register-values"); case DataReadMemory: - command = QStringLiteral("data-read-memory"); - break; + return QStringLiteral("-data-read-memory"); case DataWriteMemory: - command = QStringLiteral("data-write-memory"); - break; + return QStringLiteral("-data-write-memory"); case DataWriteRegisterVariables: - command = QStringLiteral("data-write-register-values"); - break; + return QStringLiteral("-data-write-register-values"); case EnablePrettyPrinting: - command = QStringLiteral("enable-pretty-printing"); - break; + return QStringLiteral("-enable-pretty-printing"); case EnableTimings: - command = QStringLiteral("enable-timings"); - break; + return QStringLiteral("-enable-timings"); case EnvironmentCd: - command = QStringLiteral("environment-cd"); - break; + return QStringLiteral("-environment-cd"); case EnvironmentDirectory: - command = QStringLiteral("environment-directory"); - break; + return QStringLiteral("-environment-directory"); case EnvironmentPath: - command = QStringLiteral("environment-path"); - break; + return QStringLiteral("-environment-path"); case EnvironmentPwd: - command = QStringLiteral("environment-pwd"); - break; + return QStringLiteral("-environment-pwd"); case ExecAbort: - command = QStringLiteral("exec-abort"); - break; + return QStringLiteral("-exec-abort"); case ExecArguments: - command = QStringLiteral("exec-arguments");//"set args" - break; + return QStringLiteral("-exec-arguments");//"set args" case ExecContinue: - command = QStringLiteral("exec-continue"); - break; + return QStringLiteral("-exec-continue"); case ExecFinish: - command = QStringLiteral("exec-finish"); - break; + return QStringLiteral("-exec-finish"); case ExecInterrupt: - command = QStringLiteral("exec-interrupt"); - break; + return QStringLiteral("-exec-interrupt"); case ExecNext: - command = QStringLiteral("exec-next"); - break; + return QStringLiteral("-exec-next"); case ExecNextInstruction: - command = QStringLiteral("exec-next-instruction"); - break; + return QStringLiteral("-exec-next-instruction"); case ExecRun: - command = QStringLiteral("exec-run"); - break; + return QStringLiteral("-exec-run"); case ExecStep: - command = QStringLiteral("exec-step"); - break; + return QStringLiteral("-exec-step"); case ExecStepInstruction: - command = QStringLiteral("exec-step-instruction"); - break; + return QStringLiteral("-exec-step-instruction"); case ExecUntil: - command = QStringLiteral("exec-until"); - break; + return QStringLiteral("-exec-until"); case FileExecAndSymbols: - command = QStringLiteral("file-exec-and-symbols");//"file" - break; + return QStringLiteral("-file-exec-and-symbols");//"file" case FileExecFile: - command = QStringLiteral("file-exec-file");//"exec-file" - break; + return QStringLiteral("-file-exec-file");//"exec-file" case FileListExecSourceFile: - command = QStringLiteral("file-list-exec-source-file"); - break; + return QStringLiteral("-file-list-exec-source-file"); case FileListExecSourceFiles: - command = QStringLiteral("file-list-exec-source-files"); - break; + return QStringLiteral("-file-list-exec-source-files"); case FileSymbolFile: - command = QStringLiteral("file-symbol-file");//"symbol-file" - break; + return QStringLiteral("-file-symbol-file");//"symbol-file" case GdbExit: - command = QStringLiteral("gdb-exit"); - break; + return QStringLiteral("-gdb-exit"); case GdbSet: - command = QStringLiteral("gdb-set");//"set" - break; + return QStringLiteral("-gdb-set");//"set" case GdbShow: - command = QStringLiteral("gdb-show");//"show" - break; + return QStringLiteral("-gdb-show");//"show" case GdbVersion: - command = QStringLiteral("gdb-version");//"show version" - break; + return QStringLiteral("-gdb-version");//"show version" case InferiorTtySet: - command = QStringLiteral("inferior-tty-set"); - break; + return QStringLiteral("-inferior-tty-set"); case InferiorTtyShow: - command = QStringLiteral("inferior-tty-show"); - break; + return QStringLiteral("-inferior-tty-show"); case InterpreterExec: - command = QStringLiteral("interpreter-exec"); - break; + return QStringLiteral("-interpreter-exec"); case ListFeatures: - command = QStringLiteral("list-features"); - break; + return QStringLiteral("-list-features"); case SignalHandle: return QStringLiteral("handle"); - //command = "signal-handle"; - break; + //return QStringLiteral("-signal-handle"); case StackInfoDepth: - command = QStringLiteral("stack-info-depth"); - break; + return QStringLiteral("-stack-info-depth"); case StackInfoFrame: - command = QStringLiteral("stack-info-frame"); - break; + return QStringLiteral("-stack-info-frame"); case StackListArguments: - command = QStringLiteral("stack-list-arguments"); - break; + return QStringLiteral("-stack-list-arguments"); case StackListFrames: - command = QStringLiteral("stack-list-frames"); - break; + return QStringLiteral("-stack-list-frames"); case StackListLocals: - command = QStringLiteral("stack-list-locals"); - break; + return QStringLiteral("-stack-list-locals"); case StackSelectFrame: - command = QStringLiteral("stack-select-frame"); - break; + return QStringLiteral("-stack-select-frame"); case SymbolListLines: - command = QStringLiteral("symbol-list-lines"); - break; + return QStringLiteral("-symbol-list-lines"); case TargetAttach: - command = QStringLiteral("target-attach"); - break; + return QStringLiteral("-target-attach"); case TargetDetach: - command = QStringLiteral("target-detach");//"detach" - break; + return QStringLiteral("-target-detach");//"detach" case TargetDisconnect: - command = QStringLiteral("target-disconnect");//"disconnect" - break; + return QStringLiteral("-target-disconnect");//"disconnect" case TargetDownload: - command = QStringLiteral("target-download"); - break; + return QStringLiteral("-target-download"); case TargetSelect: - command = QStringLiteral("target-select"); - break; + return QStringLiteral("-target-select"); case ThreadInfo: - command = QStringLiteral("thread-info"); - break; + return QStringLiteral("-thread-info"); case ThreadListIds: - command = QStringLiteral("thread-list-ids"); - break; + return QStringLiteral("-thread-list-ids"); case ThreadSelect: - command = QStringLiteral("thread-select"); - break; + return QStringLiteral("-thread-select"); case TraceFind: - command = QStringLiteral("trace-find"); - break; + return QStringLiteral("-trace-find"); case TraceStart: - command = QStringLiteral("trace-start"); - break; + return QStringLiteral("-trace-start"); case TraceStop: - command = QStringLiteral("trace-stop"); - break; + return QStringLiteral("-trace-stop"); case VarAssign: - command = QStringLiteral("var-assign"); - break; + return QStringLiteral("-var-assign"); case VarCreate: - command = QStringLiteral("var-create"); - break; + return QStringLiteral("-var-create"); case VarDelete: - command = QStringLiteral("var-delete"); - break; + return QStringLiteral("-var-delete"); case VarEvaluateExpression: - command = QStringLiteral("var-evaluate-expression"); - break; + return QStringLiteral("-var-evaluate-expression"); case VarInfoPathExpression: - command = QStringLiteral("var-info-path-expression"); - break; + return QStringLiteral("-var-info-path-expression"); case VarInfoNumChildren: - command = QStringLiteral("var-info-num-children"); - break; + return QStringLiteral("-var-info-num-children"); case VarInfoType: - command = QStringLiteral("var-info-type"); - break; + return QStringLiteral("-var-info-type"); case VarListChildren: - command = QStringLiteral("var-list-children"); - break; + return QStringLiteral("-var-list-children"); case VarSetFormat: - command = QStringLiteral("var-set-format"); - break; + return QStringLiteral("-var-set-format"); case VarSetFrozen: - command = QStringLiteral("var-set-frozen"); - break; + return QStringLiteral("-var-set-frozen"); case VarShowAttributes: - command = QStringLiteral("var-show-attributes"); - break; + return QStringLiteral("-var-show-attributes"); case VarShowFormat: - command = QStringLiteral("var-show-format"); - break; + return QStringLiteral("-var-show-format"); case VarUpdate: - command = QStringLiteral("var-update"); - break; - - default: - command = QStringLiteral("unknown"); - break; + return QStringLiteral("-var-update"); } - return '-' + command; + return QStringLiteral("-unknown"); } CommandType MICommand::type() const diff --git a/plugins/debuggercommon/midebugger.cpp b/plugins/debuggercommon/midebugger.cpp --- a/plugins/debuggercommon/midebugger.cpp +++ b/plugins/debuggercommon/midebugger.cpp @@ -281,9 +281,6 @@ // On-going status information about progress of a slow operation; may be ignored break; } - - default: - Q_ASSERT(false); } break; } diff --git a/plugins/debuggercommon/widgets/disassemblewidget.cpp b/plugins/debuggercommon/widgets/disassemblewidget.cpp --- a/plugins/debuggercommon/widgets/disassemblewidget.cpp +++ b/plugins/debuggercommon/widgets/disassemblewidget.cpp @@ -134,7 +134,6 @@ { switch(flavor) { - default: case DisassemblyFlavorUnknown: m_disassemblyFlavorAtt->setChecked(false); m_disassemblyFlavorIntel->setChecked(false); diff --git a/plugins/documentview/kdevdocumentmodel.cpp b/plugins/documentview/kdevdocumentmodel.cpp --- a/plugins/documentview/kdevdocumentmodel.cpp +++ b/plugins/documentview/kdevdocumentmodel.cpp @@ -45,9 +45,8 @@ return QIcon::fromTheme(QStringLiteral("document-revert")); case IDocument::DirtyAndModified: return QIcon::fromTheme(QStringLiteral("edit-delete")); - default: - return QIcon(); } + Q_UNREACHABLE(); } IDocument::DocumentState KDevDocumentItem::documentState() const diff --git a/plugins/filetemplates/overridespage.cpp b/plugins/filetemplates/overridespage.cpp --- a/plugins/filetemplates/overridespage.cpp +++ b/plugins/filetemplates/overridespage.cpp @@ -51,11 +51,8 @@ return i18n("Protected"); case Declaration::Private: return i18n("Private"); - default: - qCritical("Unexpected value for Declaration::AccessPolicy: %d", accessPolicy); - Q_ASSERT(false); - return QString(); } + Q_UNREACHABLE(); } static QString functionPropertiesToString(ClassFunctionDeclaration* decl) diff --git a/plugins/testview/testview.cpp b/plugins/testview/testview.cpp --- a/plugins/testview/testview.cpp +++ b/plugins/testview/testview.cpp @@ -217,10 +217,8 @@ case TestResult::Error: return QIcon::fromTheme(QStringLiteral("dialog-cancel")); - - default: - return QIcon::fromTheme(QLatin1String("")); } + Q_UNREACHABLE(); } QStandardItem* TestView::itemForSuite(ITestSuite* suite)