From f6ecadb7aea68fb322bfa1dfce703a24cbd1e395 Mon Sep 17 00:00:00 2001 From: Nico Weber Date: Sat, 10 Feb 2018 00:51:00 +0000 Subject: Renable -Wimplicit-fallthrough for PDFium. Didn't find any bugs, but also doesn't require much boilerplate. Bug: TODO Change-Id: I5f30183c55216f1333c79fcb46476d281720873e Reviewed-on: https://pdfium-review.googlesource.com/26210 Reviewed-by: Lei Zhang Commit-Queue: Nico Weber --- core/fpdfapi/page/cpdf_allstates.cpp | 4 ++++ core/fpdfapi/parser/cpdf_data_avail.cpp | 2 ++ core/fpdfapi/render/cpdf_dibtransferfunc.cpp | 2 ++ core/fpdfapi/render/cpdf_renderstatus.cpp | 2 ++ core/fpdfdoc/cpdf_variabletext.cpp | 2 ++ core/fxcrt/fx_extension.cpp | 3 +++ core/fxcrt/fx_fallthrough.h | 20 ++++++++++++++++++++ core/fxcrt/xml/cxml_parser.cpp | 3 +++ core/fxge/agg/fx_agg_driver.cpp | 13 +++++++++++-- fpdfsdk/pwl/cpwl_edit_impl.cpp | 2 ++ fxjs/cjs_globaldata.cpp | 2 +- 11 files changed, 52 insertions(+), 3 deletions(-) create mode 100644 core/fxcrt/fx_fallthrough.h diff --git a/core/fpdfapi/page/cpdf_allstates.cpp b/core/fpdfapi/page/cpdf_allstates.cpp index afc87a2b5a..d2491bbee7 100644 --- a/core/fpdfapi/page/cpdf_allstates.cpp +++ b/core/fpdfapi/page/cpdf_allstates.cpp @@ -12,6 +12,7 @@ #include "core/fpdfapi/page/cpdf_streamcontentparser.h" #include "core/fpdfapi/parser/cpdf_array.h" #include "core/fpdfapi/parser/cpdf_dictionary.h" +#include "core/fxcrt/fx_fallthrough.h" #include "core/fxge/cfx_graphstatedata.h" #include "third_party/base/stl_util.h" @@ -89,6 +90,7 @@ void CPDF_AllStates::ProcessExtGS(CPDF_Dictionary* pGS, if (pGS->KeyExist("TR2")) { continue; } + FX_FALLTHROUGH; case FXBSTR_ID('T', 'R', '2', 0): m_GeneralState.SetTR(pObject && !pObject->IsName() ? pObject : nullptr); break; @@ -131,6 +133,7 @@ void CPDF_AllStates::ProcessExtGS(CPDF_Dictionary* pGS, if (pGS->KeyExist("BG2")) { continue; } + FX_FALLTHROUGH; case FXBSTR_ID('B', 'G', '2', 0): m_GeneralState.SetBG(pObject); break; @@ -138,6 +141,7 @@ void CPDF_AllStates::ProcessExtGS(CPDF_Dictionary* pGS, if (pGS->KeyExist("UCR2")) { continue; } + FX_FALLTHROUGH; case FXBSTR_ID('U', 'C', 'R', '2'): m_GeneralState.SetUCR(pObject); break; diff --git a/core/fpdfapi/parser/cpdf_data_avail.cpp b/core/fpdfapi/parser/cpdf_data_avail.cpp index af80fd96ab..e871e0a578 100644 --- a/core/fpdfapi/parser/cpdf_data_avail.cpp +++ b/core/fpdfapi/parser/cpdf_data_avail.cpp @@ -26,6 +26,7 @@ #include "core/fpdfapi/parser/fpdf_parser_utility.h" #include "core/fxcrt/cfx_memorystream.h" #include "core/fxcrt/fx_extension.h" +#include "core/fxcrt/fx_fallthrough.h" #include "core/fxcrt/fx_safe_types.h" #include "third_party/base/numerics/safe_conversions.h" #include "third_party/base/ptr_util.h" @@ -133,6 +134,7 @@ bool CPDF_DataAvail::CheckDocStatus() { return LoadAllFile(); case PDF_DATAAVAIL_PAGE_LATERLOAD: m_docStatus = PDF_DATAAVAIL_PAGE; + FX_FALLTHROUGH; default: m_bDocAvail = true; return true; diff --git a/core/fpdfapi/render/cpdf_dibtransferfunc.cpp b/core/fpdfapi/render/cpdf_dibtransferfunc.cpp index 3b0e8b25a9..959fec383d 100644 --- a/core/fpdfapi/render/cpdf_dibtransferfunc.cpp +++ b/core/fpdfapi/render/cpdf_dibtransferfunc.cpp @@ -10,6 +10,7 @@ #include "core/fpdfapi/parser/cpdf_dictionary.h" #include "core/fpdfapi/render/cpdf_transferfunc.h" +#include "core/fxcrt/fx_fallthrough.h" CPDF_DIBTransferFunc::CPDF_DIBTransferFunc( const RetainPtr& pTransferFunc) @@ -119,6 +120,7 @@ void CPDF_DIBTransferFunc::TranslateScanline( } case FXDIB_Rgb32: bSkip = true; + FX_FALLTHROUGH; case FXDIB_Argb: { int index = 0; for (int i = 0; i < m_Width; i++) { diff --git a/core/fpdfapi/render/cpdf_renderstatus.cpp b/core/fpdfapi/render/cpdf_renderstatus.cpp index 66688a2d4c..6525164547 100644 --- a/core/fpdfapi/render/cpdf_renderstatus.cpp +++ b/core/fpdfapi/render/cpdf_renderstatus.cpp @@ -49,6 +49,7 @@ #include "core/fpdfdoc/cpdf_occontext.h" #include "core/fxcrt/autorestorer.h" #include "core/fxcrt/cfx_fixedbufgrow.h" +#include "core/fxcrt/fx_fallthrough.h" #include "core/fxcrt/fx_safe_types.h" #include "core/fxcrt/maybe_owned.h" #include "core/fxge/cfx_defaultrenderdevice.h" @@ -1765,6 +1766,7 @@ bool CPDF_RenderStatus::ProcessText(CPDF_TextObject* textobj, // Already handled above, but the compiler is not smart enough to // realize it. Fall through. NOTREACHED(); + FX_FALLTHROUGH; case TextRenderingMode::MODE_CLIP: return true; } diff --git a/core/fpdfdoc/cpdf_variabletext.cpp b/core/fpdfdoc/cpdf_variabletext.cpp index 38c631d820..7da1b2f946 100644 --- a/core/fpdfdoc/cpdf_variabletext.cpp +++ b/core/fpdfdoc/cpdf_variabletext.cpp @@ -16,6 +16,7 @@ #include "core/fpdfdoc/csection.h" #include "core/fpdfdoc/ipvt_fontmap.h" #include "core/fxcrt/fx_codepage.h" +#include "core/fxcrt/fx_fallthrough.h" #include "third_party/base/ptr_util.h" #include "third_party/base/stl_util.h" @@ -317,6 +318,7 @@ void CPDF_VariableText::SetText(const WideString& swText) { break; case 0x09: word = 0x20; + FX_FALLTHROUGH; default: wp = InsertWord(wp, word, FX_CHARSET_Default); break; diff --git a/core/fxcrt/fx_extension.cpp b/core/fxcrt/fx_extension.cpp index 62cf8a0e04..371f1b5211 100644 --- a/core/fxcrt/fx_extension.cpp +++ b/core/fxcrt/fx_extension.cpp @@ -6,6 +6,8 @@ #include "core/fxcrt/fx_extension.h" +#include "core/fxcrt/fx_fallthrough.h" + #include #include @@ -21,6 +23,7 @@ float FXSYS_wcstof(const wchar_t* pwsStr, int32_t iLength, int32_t* pUsedLen) { switch (pwsStr[iUsedLen]) { case '-': bNegtive = true; + FX_FALLTHROUGH; case '+': iUsedLen++; break; diff --git a/core/fxcrt/fx_fallthrough.h b/core/fxcrt/fx_fallthrough.h new file mode 100644 index 0000000000..5587ee2295 --- /dev/null +++ b/core/fxcrt/fx_fallthrough.h @@ -0,0 +1,20 @@ +// Copyright 2018 PDFium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CORE_FXCRT_FX_FALLTHROUGH_H_ +#define CORE_FXCRT_FX_FALLTHROUGH_H_ + +// When clang suggests inserting [[clang::fallthrough]], it first checks if +// it knows of a macro expanding to it, and if so suggests inserting the +// macro. This means that this macro must be used only in code internal +// to PDFium, so that PDFium's user code doesn't end up getting suggestions +// for FX_FALLTHROUGH instead of the user-specific fallthrough macro. +// So do not include this header in any of PDFium's public headers. +#if defined(__clang__) +#define FX_FALLTHROUGH [[clang::fallthrough]] +#else +#define FX_FALLTHROUGH +#endif + +#endif // CORE_FXCRT_FX_FALLTHROUGH_H_ diff --git a/core/fxcrt/xml/cxml_parser.cpp b/core/fxcrt/xml/cxml_parser.cpp index ae5fd6d0fc..64bb0ec530 100644 --- a/core/fxcrt/xml/cxml_parser.cpp +++ b/core/fxcrt/xml/cxml_parser.cpp @@ -14,6 +14,7 @@ #include "core/fxcrt/cfx_utf8decoder.h" #include "core/fxcrt/cfx_widetextbuf.h" #include "core/fxcrt/fx_extension.h" +#include "core/fxcrt/fx_fallthrough.h" #include "core/fxcrt/xml/cxml_content.h" #include "core/fxcrt/xml/cxml_element.h" #include "core/fxcrt/xml/cxml_parser.h" @@ -200,6 +201,7 @@ uint32_t CXML_Parser::GetCharRef() { break; } iState = 1; + FX_FALLTHROUGH; case 1: m_dwIndex++; if (ch == ';') { @@ -226,6 +228,7 @@ uint32_t CXML_Parser::GetCharRef() { break; } iState = 3; + FX_FALLTHROUGH; case 3: m_dwIndex++; if (ch == ';') { diff --git a/core/fxge/agg/fx_agg_driver.cpp b/core/fxge/agg/fx_agg_driver.cpp index b394facace..922f39efcd 100644 --- a/core/fxge/agg/fx_agg_driver.cpp +++ b/core/fxge/agg/fx_agg_driver.cpp @@ -15,6 +15,14 @@ #include "core/fxge/cfx_pathdata.h" #include "core/fxge/dib/cfx_imagerenderer.h" #include "core/fxge/dib/cfx_imagestretcher.h" +#include "third_party/base/ptr_util.h" +#include "third_party/base/stl_util.h" + +// Ignore fallthrough warnings in agg23 headers. +#if defined(__clang__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wimplicit-fallthrough" +#endif #include "third_party/agg23/agg_conv_dash.h" #include "third_party/agg23/agg_conv_stroke.h" #include "third_party/agg23/agg_curves.h" @@ -23,8 +31,9 @@ #include "third_party/agg23/agg_rasterizer_scanline_aa.h" #include "third_party/agg23/agg_renderer_scanline.h" #include "third_party/agg23/agg_scanline_u.h" -#include "third_party/base/ptr_util.h" -#include "third_party/base/stl_util.h" +#if defined(__clang__) +#pragma GCC diagnostic pop +#endif namespace { diff --git a/fpdfsdk/pwl/cpwl_edit_impl.cpp b/fpdfsdk/pwl/cpwl_edit_impl.cpp index 91496f0c8d..6fad6414d0 100644 --- a/fpdfsdk/pwl/cpwl_edit_impl.cpp +++ b/fpdfsdk/pwl/cpwl_edit_impl.cpp @@ -23,6 +23,7 @@ #include "core/fpdfdoc/ipvt_fontmap.h" #include "core/fxcrt/autorestorer.h" #include "core/fxcrt/fx_codepage.h" +#include "core/fxcrt/fx_fallthrough.h" #include "core/fxge/cfx_graphstatedata.h" #include "core/fxge/cfx_pathdata.h" #include "core/fxge/cfx_renderdevice.h" @@ -1817,6 +1818,7 @@ CPVT_WordPlace CPWL_EditImpl::DoInsertText(const CPVT_WordPlace& place, break; case 0x09: word = 0x20; + FX_FALLTHROUGH; default: wp = m_pVT->InsertWord(wp, word, GetCharSetFromUnicode(word, charset)); diff --git a/fxjs/cjs_globaldata.cpp b/fxjs/cjs_globaldata.cpp index a78bce55c3..29db2debf8 100644 --- a/fxjs/cjs_globaldata.cpp +++ b/fxjs/cjs_globaldata.cpp @@ -297,7 +297,7 @@ void CJS_GlobalData::LoadGlobalPersistentVariables() { case JS_GlobalDataType::NULLOBJ: { SetGlobalVariableNull(sEntry); SetGlobalVariablePersistent(sEntry, true); - } + } break; case JS_GlobalDataType::OBJECT: break; } -- cgit v1.2.3