sc/source/core/data/column.cxx       |   12 +-
 sc/source/core/data/column3.cxx      |   13 +-
 sc/source/core/data/dociter.cxx      |    5 
 sc/source/core/data/documen4.cxx     |   13 +-
 sc/source/core/data/formulacell.cxx  |   53 +++++---
 sc/source/core/data/global2.cxx      |    4 
 sc/source/core/data/table6.cxx       |  207 ++++++++++++++++++-----------------
 sc/source/core/data/validat.cxx      |   41 +++---
 sc/source/core/tool/chartpos.cxx     |   24 ++--
 sc/source/core/tool/chgtrack.cxx     |   31 +++--
 sc/source/core/tool/compiler.cxx     |   20 ++-
 sc/source/core/tool/interpr1.cxx     |    4 
 sc/source/core/tool/interpr4.cxx     |   64 ++++++----
 sc/source/core/tool/token.cxx        |   63 +++++-----
 sc/source/filter/excel/xeformula.cxx |   67 ++++++++---
 sc/source/filter/excel/xetable.cxx   |    4 
 sc/source/filter/html/htmlpars.cxx   |   17 ++
 sc/source/filter/oox/formulabase.cxx |    2 
 sc/source/ui/app/drwtrans.cxx        |   19 +--
 sc/source/ui/app/inputhdl.cxx        |   11 +
 sc/source/ui/app/seltrans.cxx        |   19 +--
 sc/source/ui/dbgui/csvgrid.cxx       |    8 +
 sc/source/ui/dbgui/validate.cxx      |    3 
 sc/source/ui/docshell/docsh8.cxx     |    6 -
 sc/source/ui/miscdlgs/anyrefdg.cxx   |    3 
 sc/source/ui/view/dbfunc3.cxx        |   21 ++-
 sc/source/ui/view/gridwin.cxx        |   52 ++++----
 sc/source/ui/view/viewfun2.cxx       |   24 ++--
 28 files changed, 480 insertions(+), 330 deletions(-)

New commits:
commit 61d8db6b1a2026a29f61eaa691beb3c6cf05de5c
Author:     Noel Grandin <noel.gran...@collabora.co.uk>
AuthorDate: Wed Apr 15 09:25:22 2020 +0200
Commit:     Noel Grandin <noel.gran...@collabora.co.uk>
CommitDate: Wed Apr 15 20:59:31 2020 +0200

    loplugin:buriedassign in sc
    
    Change-Id: I9b4146c4e8814a36c7bfcd4c31f913c8412320e8
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/92244
    Tested-by: Jenkins
    Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk>

diff --git a/sc/source/core/data/column.cxx b/sc/source/core/data/column.cxx
index 9388e01ee1f0..a223352b8dd3 100644
--- a/sc/source/core/data/column.cxx
+++ b/sc/source/core/data/column.cxx
@@ -627,9 +627,11 @@ const ScStyleSheet* ScColumn::GetSelectionStyle( const 
ScMarkData& rMark, bool&
         ScAttrIterator aAttrIter( pAttrArray.get(), nTop, nBottom, 
pDocument->GetDefPattern() );
         SCROW nRow;
         SCROW nDummy;
-        const ScPatternAttr* pPattern;
-        while (bEqual && ( pPattern = aAttrIter.Next( nRow, nDummy ) ) != 
nullptr)
+        while (bEqual)
         {
+            const ScPatternAttr* pPattern = aAttrIter.Next( nRow, nDummy );
+            if (!pPattern)
+                break;
             pNewStyle = pPattern->GetStyleSheet();
             rFound = true;
             if ( !pNewStyle || ( pStyle && pNewStyle != pStyle ) )
@@ -653,9 +655,11 @@ const ScStyleSheet* ScColumn::GetAreaStyle( bool& rFound, 
SCROW nRow1, SCROW nRo
     ScAttrIterator aAttrIter( pAttrArray.get(), nRow1, nRow2, 
GetDoc()->GetDefPattern() );
     SCROW nRow;
     SCROW nDummy;
-    const ScPatternAttr* pPattern;
-    while (bEqual && ( pPattern = aAttrIter.Next( nRow, nDummy ) ) != nullptr)
+    while (bEqual)
     {
+        const ScPatternAttr* pPattern = aAttrIter.Next( nRow, nDummy );
+        if (!pPattern)
+            break;
         pNewStyle = pPattern->GetStyleSheet();
         rFound = true;
         if ( !pNewStyle || ( pStyle && pNewStyle != pStyle ) )
diff --git a/sc/source/core/data/column3.cxx b/sc/source/core/data/column3.cxx
index 2f3869db93c0..88ed96df0f3c 100644
--- a/sc/source/core/data/column3.cxx
+++ b/sc/source/core/data/column3.cxx
@@ -1965,16 +1965,17 @@ bool ScColumn::ParseString(
     sal_uInt32 nIndex = 0;
     sal_uInt32 nOldIndex = 0;
     SvNumFormatType eNumFormatType = SvNumFormatType::ALL;
-    sal_Unicode cFirstChar;
     if (!aParam.mpNumFormatter)
         aParam.mpNumFormatter = GetDoc()->GetFormatTable();
 
+    sal_Unicode cFirstChar = 0; // Text
     nIndex = nOldIndex = GetNumberFormat( GetDoc()->GetNonThreadedContext(), 
nRow );
-    if ( rString.getLength() > 1
-            && (eNumFormatType = aParam.mpNumFormatter->GetType(nIndex)) != 
SvNumFormatType::TEXT )
-        cFirstChar = rString[0];
-    else
-        cFirstChar = 0; // Text
+    if ( rString.getLength() > 1 )
+    {
+        eNumFormatType = aParam.mpNumFormatter->GetType(nIndex);
+        if ( eNumFormatType != SvNumFormatType::TEXT )
+            cFirstChar = rString[0];
+    }
 
     svl::SharedStringPool& rPool = GetDoc()->GetSharedStringPool();
 
diff --git a/sc/source/core/data/dociter.cxx b/sc/source/core/data/dociter.cxx
index 604cbbf361b0..85be65c5c17d 100644
--- a/sc/source/core/data/dociter.cxx
+++ b/sc/source/core/data/dociter.cxx
@@ -1312,8 +1312,11 @@ bool ScQueryCellIterator::FindEqualOrSortedLastInRange( 
SCCOL& nFoundCol,
             nFoundCol = GetCol();
             nFoundRow = GetRow();
             aPosSave = maCurPos;
+            if (IsEqualConditionFulfilled())
+                break;
+            bNext = GetNext();
         }
-        while ( !IsEqualConditionFulfilled() && (bNext = GetNext()));
+        while (bNext);
 
         // There may be no pNext but equal condition fulfilled if regular
         // expressions are involved. Keep the found entry and proceed.
diff --git a/sc/source/core/data/documen4.cxx b/sc/source/core/data/documen4.cxx
index 871d0cba34cc..bbed307d5cc6 100644
--- a/sc/source/core/data/documen4.cxx
+++ b/sc/source/core/data/documen4.cxx
@@ -489,10 +489,12 @@ bool ScDocument::MarkUsedExternalReferences( const 
ScTokenArray& rArr, const ScA
 
     ScExternalRefManager* pRefMgr = nullptr;
     formula::FormulaTokenArrayPlainIterator aIter( rArr );
-    formula::FormulaToken* t = nullptr;
     bool bAllMarked = false;
-    while (!bAllMarked && (t = aIter.GetNextReferenceOrName()) != nullptr)
+    while (!bAllMarked)
     {
+        formula::FormulaToken* t = aIter.GetNextReferenceOrName();
+        if (!t)
+            break;
         if (t->IsExternalRef())
         {
             if (!pRefMgr)
@@ -632,9 +634,10 @@ double ScDocument::RoundValueAsShown( double fVal, 
sal_uInt32 nFormat, const ScI
 {
     const SvNumberFormatter* pFormatter = pContext ? 
pContext->GetFormatTable() : GetFormatTable();
     const SvNumberformat* pFormat = pFormatter->GetEntry( nFormat );
-    SvNumFormatType nType;
-    if (pFormat && (nType = pFormat->GetMaskedType()) != SvNumFormatType::DATE
-            && nType != SvNumFormatType::TIME && nType != 
SvNumFormatType::DATETIME )
+    if (!pFormat)
+        return fVal;
+    SvNumFormatType nType = pFormat->GetMaskedType();
+    if (nType != SvNumFormatType::DATE && nType != SvNumFormatType::TIME && 
nType != SvNumFormatType::DATETIME )
     {
         short nPrecision;
         if ((nFormat % SV_COUNTRY_LANGUAGE_OFFSET) != 0)
diff --git a/sc/source/core/data/formulacell.cxx 
b/sc/source/core/data/formulacell.cxx
index 90f7c70b01e7..328b881b516c 100644
--- a/sc/source/core/data/formulacell.cxx
+++ b/sc/source/core/data/formulacell.cxx
@@ -881,9 +881,11 @@ ScFormulaCell::ScFormulaCell(const ScFormulaCell& rCell, 
ScDocument& rDoc, const
     if( !bCompile )
     {   // Name references with references and ColRowNames
         formula::FormulaTokenArrayPlainIterator aIter(*pCode);
-        formula::FormulaToken* t;
-        while ( ( t = aIter.GetNextReferenceOrName() ) != nullptr && !bCompile 
)
+        for (;;)
         {
+            formula::FormulaToken* t = aIter.GetNextReferenceOrName();
+            if (!t || bCompile)
+                break;
             if ( t->IsExternalRef() )
             {
                 // External name, cell, and area references.
@@ -1094,15 +1096,17 @@ void ScFormulaCell::GetResultDimensions( SCSIZE& rCols, 
SCSIZE& rRows )
 {
     MaybeInterpret();
 
-    const ScMatrix* pMat = nullptr;
-    if (pCode->GetCodeError() == FormulaError::NONE && aResult.GetType() == 
svMatrixCell &&
-            ((pMat = aResult.GetToken()->GetMatrix()) != nullptr))
-        pMat->GetDimensions( rCols, rRows );
-    else
+    if (pCode->GetCodeError() == FormulaError::NONE && aResult.GetType() == 
svMatrixCell)
     {
-        rCols = 0;
-        rRows = 0;
+        const ScMatrix* pMat = aResult.GetToken()->GetMatrix();
+        if (pMat)
+        {
+            pMat->GetDimensions( rCols, rRows );
+            return;
+        }
     }
+    rCols = 0;
+    rRows = 0;
 }
 
 void ScFormulaCell::ResetDirty() { bDirty = bTableOpDirty = mbPostponedDirty = 
false; }
@@ -1699,14 +1703,17 @@ bool ScFormulaCell::Interpret(SCROW nStartOffset, SCROW 
nEndOffset)
                      * added above with rRecursionHelper.Insert() should always
                      * be 'this', shouldn't it? */
                     ScFormulaCell* pLastCell = nullptr;
-                    if (rRecursionHelper.GetList().size() > 1 &&
-                            ((pLastCell = 
rRecursionHelper.GetList().back().pCell) != this))
+                    if (rRecursionHelper.GetList().size() > 1)
                     {
-                        pDocument->IncInterpretLevel();
-                        ScInterpreterContextGetterGuard 
aContextGetterGuard(*pDocument, pDocument->GetFormatTable());
-                        pLastCell->InterpretTail(
-                            *aContextGetterGuard.GetInterpreterContext(), 
SCITP_CLOSE_ITERATION_CIRCLE);
-                        pDocument->DecInterpretLevel();
+                        pLastCell = rRecursionHelper.GetList().back().pCell;
+                        if (pLastCell != this)
+                        {
+                            pDocument->IncInterpretLevel();
+                            ScInterpreterContextGetterGuard 
aContextGetterGuard(*pDocument, pDocument->GetFormatTable());
+                            pLastCell->InterpretTail(
+                                *aContextGetterGuard.GetInterpreterContext(), 
SCITP_CLOSE_ITERATION_CIRCLE);
+                            pDocument->DecInterpretLevel();
+                        }
                     }
                     // Start at 1, init things.
                     rRecursionHelper.StartIteration();
@@ -2039,8 +2046,8 @@ void ScFormulaCell::InterpretTail( ScInterpreterContext& 
rContext, ScInterpretTa
             const SvNumFormatType nRetType = pInterpreter->GetRetFormatType();
             if (nRetType == SvNumFormatType::LOGICAL)
             {
-                double fVal;
-                if ((fVal = aNewResult.GetDouble()) != 1.0 && fVal != 0.0)
+                double fVal = aNewResult.GetDouble();
+                if (fVal != 1.0 && fVal != 0.0)
                     bForceNumberFormat = false;
                 else
                 {
@@ -2112,10 +2119,14 @@ void ScFormulaCell::InterpretTail( 
ScInterpreterContext& rContext, ScInterpretTa
                         bSetFormat = false;
                         nFormatType = nOldFormatType;   // that? or number?
                     }
-                    else if ((fVal = aNewResult.GetDouble()) != 1.0 && fVal != 
0.0)
+                    else
                     {
-                        bSetFormat = false;
-                        nFormatType = SvNumFormatType::NUMBER;
+                        fVal = aNewResult.GetDouble();
+                        if (fVal != 1.0 && fVal != 0.0)
+                        {
+                            bSetFormat = false;
+                            nFormatType = SvNumFormatType::NUMBER;
+                        }
                     }
                 }
             }
diff --git a/sc/source/core/data/global2.cxx b/sc/source/core/data/global2.cxx
index 95c6f81dffbc..0f10debc2aa1 100644
--- a/sc/source/core/data/global2.cxx
+++ b/sc/source/core/data/global2.cxx
@@ -421,8 +421,8 @@ Label_fallback_to_unambiguous:
     // Decimal and group separator 0 => only integer and possibly exponent,
     // stops at first non-digit non-sign.
     fValue = ::rtl::math::stringToDouble( rStr, 0, 0, &eStatus, &nParseEnd);
-    sal_Int32 nLen;
-    if (eStatus == rtl_math_ConversionStatus_Ok && nParseEnd < (nLen = 
rStr.getLength()))
+    sal_Int32 nLen = rStr.getLength();
+    if (eStatus == rtl_math_ConversionStatus_Ok && nParseEnd < nLen)
     {
         // Not at string end, check for trailing blanks or switch to date or
         // time parsing or bail out.
diff --git a/sc/source/core/data/table6.cxx b/sc/source/core/data/table6.cxx
index 63eab0850af8..4769a78b2a77 100644
--- a/sc/source/core/data/table6.cxx
+++ b/sc/source/core/data/table6.cxx
@@ -151,119 +151,130 @@ bool ScTable::SearchCell(const SvxSearchItem& 
rSearchItem, SCCOL nCol, sc::Colum
         return bFound;
     }
 
+    if (!bFound)
+        return false;
+    if ( rSearchItem.GetCommand() != SvxSearchCmd::REPLACE
+         && rSearchItem.GetCommand() != SvxSearchCmd::REPLACE_ALL )
+        return bFound;
+
+    if (!IsBlockEditable(nCol, nRow, nCol, nRow))
+        return bFound;
+
     ScMatrixMode cMatrixFlag = ScMatrixMode::NONE;
-    if ( bFound &&
-        ( (rSearchItem.GetCommand() == SvxSearchCmd::REPLACE)
-        ||(rSearchItem.GetCommand() == SvxSearchCmd::REPLACE_ALL) ) &&
-            // Don't split the matrix, only replace Matrix formulas
-            !( (eCellType == CELLTYPE_FORMULA &&
-            ((cMatrixFlag = aCell.mpFormula->GetMatrixFlag()) == 
ScMatrixMode::Reference))
-            // No UndoDoc => Matrix not restorable => don't replace
-            || (cMatrixFlag != ScMatrixMode::NONE && !pUndoDoc) ) &&
-         IsBlockEditable(nCol, nRow, nCol, nRow)
-        )
+
+    // Don't split the matrix, only replace Matrix formulas
+    if (eCellType == CELLTYPE_FORMULA)
+    {
+        cMatrixFlag = aCell.mpFormula->GetMatrixFlag();
+        if(cMatrixFlag == ScMatrixMode::Reference)
+            return bFound;
+    }
+    // No UndoDoc => Matrix not restorable => don't replace
+    if (cMatrixFlag != ScMatrixMode::NONE && !pUndoDoc)
+        return bFound;
+
+    if ( cMatrixFlag == ScMatrixMode::NONE && rSearchItem.GetCommand() == 
SvxSearchCmd::REPLACE )
+        rUndoStr = aString;
+    else if (pUndoDoc)
+    {
+        ScAddress aAdr( nCol, nRow, nTab );
+        aCell.commit(*pUndoDoc, aAdr);
+    }
+
+    bool bRepeat = !rSearchItem.GetWordOnly();
+    do
     {
-        if ( cMatrixFlag == ScMatrixMode::NONE && rSearchItem.GetCommand() == 
SvxSearchCmd::REPLACE )
-            rUndoStr = aString;
-        else if (pUndoDoc)
+        //  don't continue search if the found text is empty,
+        //  otherwise it would never stop (#35410#)
+        if ( nEnd < nStart )
+            bRepeat = false;
+
+        OUString sReplStr = rSearchItem.GetReplaceString();
+        if (rSearchItem.GetRegExp())
         {
-            ScAddress aAdr( nCol, nRow, nTab );
-            aCell.commit(*pUndoDoc, aAdr);
+            pSearchText->ReplaceBackReferences( sReplStr, aString, 
aSearchResult );
+            OUStringBuffer aStrBuffer(aString);
+            aStrBuffer.remove(nStart, nEnd-nStart+1);
+            aStrBuffer.insert(nStart, sReplStr);
+            aString = aStrBuffer.makeStringAndClear();
         }
-        bool bRepeat = !rSearchItem.GetWordOnly();
-        do
+        else
         {
-            //  don't continue search if the found text is empty,
-            //  otherwise it would never stop (#35410#)
-            if ( nEnd < nStart )
-                bRepeat = false;
+            OUStringBuffer aStrBuffer(aString);
+            aStrBuffer.remove(nStart, nEnd-nStart+1);
+            aStrBuffer.insert(nStart, rSearchItem.GetReplaceString());
+            aString = aStrBuffer.makeStringAndClear();
+        }
 
-            OUString sReplStr = rSearchItem.GetReplaceString();
-            if (rSearchItem.GetRegExp())
-            {
-                pSearchText->ReplaceBackReferences( sReplStr, aString, 
aSearchResult );
-                OUStringBuffer aStrBuffer(aString);
-                aStrBuffer.remove(nStart, nEnd-nStart+1);
-                aStrBuffer.insert(nStart, sReplStr);
-                aString = aStrBuffer.makeStringAndClear();
-            }
-            else
-            {
-                OUStringBuffer aStrBuffer(aString);
-                aStrBuffer.remove(nStart, nEnd-nStart+1);
-                aStrBuffer.insert(nStart, rSearchItem.GetReplaceString());
-                aString = aStrBuffer.makeStringAndClear();
-            }
+        //  Adjust index
+        if (bDoBack)
+        {
+            nEnd = nStart;
+            nStart = 0;
+        }
+        else
+        {
+            nStart = nStart + sReplStr.getLength();
+            nEnd = aString.getLength();
+        }
 
-            //  Adjust index
-            if (bDoBack)
+        //  continue search ?
+        if (bRepeat)
+        {
+            if ( rSearchItem.GetCommand() != SvxSearchCmd::REPLACE_ALL || 
nStart >= nEnd )
+                bRepeat = false;
+            else if (bDoBack)
             {
-                nEnd = nStart;
-                nStart = 0;
+                sal_Int32 nTemp=nStart; nStart=nEnd; nEnd=nTemp;
+                bRepeat = pSearchText->SearchBackward(aString, &nStart, &nEnd, 
&aSearchResult);
+                // change results to definition before 614:
+                --nEnd;
             }
             else
             {
-                nStart = nStart + sReplStr.getLength();
-                nEnd = aString.getLength();
-            }
-
-            //  continue search ?
-            if (bRepeat)
-            {
-                if ( rSearchItem.GetCommand() != SvxSearchCmd::REPLACE_ALL || 
nStart >= nEnd )
-                    bRepeat = false;
-                else if (bDoBack)
-                {
-                    sal_Int32 nTemp=nStart; nStart=nEnd; nEnd=nTemp;
-                    bRepeat = pSearchText->SearchBackward(aString, &nStart, 
&nEnd, &aSearchResult);
-                    // change results to definition before 614:
-                    --nEnd;
-                }
-                else
-                {
-                    bRepeat = pSearchText->SearchForward(aString, &nStart, 
&nEnd, &aSearchResult);
-                    // change results to definition before 614:
-                    --nEnd;
-                }
+                bRepeat = pSearchText->SearchForward(aString, &nStart, &nEnd, 
&aSearchResult);
+                // change results to definition before 614:
+                --nEnd;
             }
         }
-        while (bRepeat);
-        if (rSearchItem.GetCellType() == SvxSearchCellType::NOTE)
-        {
-            // NB: rich text format is lost.
-            // This is also true of Cells.
-            if (pNote)
-                pNote->SetText( ScAddress( nCol, nRow, nTab ), aString );
-        }
-        else if ( cMatrixFlag != ScMatrixMode::NONE )
-        {   // don't split Matrix
-            if ( aString.getLength() > 2 )
-            {   // remove {} here so that "{=" can be replaced by "{=..."
-                if ( aString[ aString.getLength()-1 ] == '}' )
-                    aString = aString.copy( 0, aString.getLength()-1 );
-                if ( aString[0] == '{' )
-                    aString = aString.copy( 1 );
-            }
-            ScAddress aAdr( nCol, nRow, nTab );
-            ScFormulaCell* pFCell = new ScFormulaCell( pDocument, aAdr,
-                aString, pDocument->GetGrammar(), cMatrixFlag );
-            SCCOL nMatCols;
-            SCROW nMatRows;
-            aCell.mpFormula->GetMatColsRows(nMatCols, nMatRows);
-            pFCell->SetMatColsRows( nMatCols, nMatRows );
-            aCol[nCol].SetFormulaCell(nRow, pFCell);
-        }
-        else if ( bMultiLine && aString.indexOf('\n') != -1 )
-        {
-            ScFieldEditEngine& rEngine = pDocument->GetEditEngine();
-            rEngine.SetTextCurrentDefaults(aString);
-            SetEditText(nCol, nRow, rEngine.CreateTextObject());
+    }
+    while (bRepeat);
+    if (rSearchItem.GetCellType() == SvxSearchCellType::NOTE)
+    {
+        // NB: rich text format is lost.
+        // This is also true of Cells.
+        if (pNote)
+            pNote->SetText( ScAddress( nCol, nRow, nTab ), aString );
+    }
+    else if ( cMatrixFlag != ScMatrixMode::NONE )
+    {   // don't split Matrix
+        if ( aString.getLength() > 2 )
+        {   // remove {} here so that "{=" can be replaced by "{=..."
+            if ( aString[ aString.getLength()-1 ] == '}' )
+                aString = aString.copy( 0, aString.getLength()-1 );
+            if ( aString[0] == '{' )
+                aString = aString.copy( 1 );
         }
-        else
-            aCol[nCol].SetString(nRow, nTab, aString, 
pDocument->GetAddressConvention());
-        // pCell is invalid now (deleted)
-        aCol[nCol].InitBlockPosition( rBlockPos ); // invalidate also the 
cached position
+        ScAddress aAdr( nCol, nRow, nTab );
+        ScFormulaCell* pFCell = new ScFormulaCell( pDocument, aAdr,
+            aString, pDocument->GetGrammar(), cMatrixFlag );
+        SCCOL nMatCols;
+        SCROW nMatRows;
+        aCell.mpFormula->GetMatColsRows(nMatCols, nMatRows);
+        pFCell->SetMatColsRows( nMatCols, nMatRows );
+        aCol[nCol].SetFormulaCell(nRow, pFCell);
+    }
+    else if ( bMultiLine && aString.indexOf('\n') != -1 )
+    {
+        ScFieldEditEngine& rEngine = pDocument->GetEditEngine();
+        rEngine.SetTextCurrentDefaults(aString);
+        SetEditText(nCol, nRow, rEngine.CreateTextObject());
     }
+    else
+        aCol[nCol].SetString(nRow, nTab, aString, 
pDocument->GetAddressConvention());
+    // pCell is invalid now (deleted)
+    aCol[nCol].InitBlockPosition( rBlockPos ); // invalidate also the cached 
position
+
     return bFound;
 }
 
diff --git a/sc/source/core/data/validat.cxx b/sc/source/core/data/validat.cxx
index 056fd3eb6547..e2921aaf7368 100644
--- a/sc/source/core/data/validat.cxx
+++ b/sc/source/core/data/validat.cxx
@@ -732,32 +732,35 @@ bool ScValidationData::GetSelectionFromFormula(
     ScRange aRange;
 
     ScTokenArray* pArr = const_cast<ScTokenArray*>(&rTokArr);
-    formula::FormulaTokenArrayPlainIterator aIter(*pArr);
-    formula::FormulaToken* t = nullptr;
-    if (pArr->GetLen() == 1 && (t = aIter.GetNextReferenceOrName()) != nullptr)
+    if (pArr->GetLen() == 1)
     {
-        OpCode eOpCode = t->GetOpCode();
-        if (eOpCode == ocDBArea || eOpCode == ocTableRef)
+        formula::FormulaTokenArrayPlainIterator aIter(*pArr);
+        formula::FormulaToken* t = aIter.GetNextReferenceOrName();
+        if (t)
         {
-            if (const ScDBData* pDBData = 
pDocument->GetDBCollection()->getNamedDBs().findByIndex(t->GetIndex()))
+            OpCode eOpCode = t->GetOpCode();
+            if (eOpCode == ocDBArea || eOpCode == ocTableRef)
             {
-                pDBData->GetArea(aRange);
-                bRef = true;
+                if (const ScDBData* pDBData = 
pDocument->GetDBCollection()->getNamedDBs().findByIndex(t->GetIndex()))
+                {
+                    pDBData->GetArea(aRange);
+                    bRef = true;
+                }
             }
-        }
-        else if (eOpCode == ocName)
-        {
-            const ScRangeData* pName = 
pDocument->FindRangeNameBySheetAndIndex( t->GetSheet(), t->GetIndex());
-            if (pName && pName->IsReference(aRange))
+            else if (eOpCode == ocName)
             {
-                bRef = true;
+                const ScRangeData* pName = 
pDocument->FindRangeNameBySheetAndIndex( t->GetSheet(), t->GetIndex());
+                if (pName && pName->IsReference(aRange))
+                {
+                    bRef = true;
+                }
             }
-        }
-        else if (t->GetType() != svIndex)
-        {
-            if (pArr->IsValidReference(aRange, rPos))
+            else if (t->GetType() != svIndex)
             {
-                bRef = true;
+                if (pArr->IsValidReference(aRange, rPos))
+                {
+                    bRef = true;
+                }
             }
         }
     }
diff --git a/sc/source/core/tool/chartpos.cxx b/sc/source/core/tool/chartpos.cxx
index 6448fa3d8d91..89326661f319 100644
--- a/sc/source/core/tool/chartpos.cxx
+++ b/sc/source/core/tool/chartpos.cxx
@@ -204,10 +204,14 @@ void ScChartPositioner::GlueState()
             else
                 *p = CellState::Free;
         }
-        if ( bGlue && *(p = (pA.get() + (((static_cast<sal_uLong>(nCol)+1) * 
nR) - 1))) == CellState::Free )
-        {   // mark column as totally unused
-            *p = CellState::Glue;
-            bGlueCols = true; // one unused column at least
+        if ( bGlue )
+        {
+            p = pA.get() + (((static_cast<sal_uLong>(nCol)+1) * nR) - 1);
+            if (*p == CellState::Free)
+            {   // mark column as totally unused
+                *p = CellState::Glue;
+                bGlueCols = true; // one unused column at least
+            }
         }
     }
 
@@ -227,10 +231,14 @@ void ScChartPositioner::GlueState()
             else
                 *p = CellState::Free;
         }
-        if ( bGlue && *(p = (pA.get() + (((static_cast<sal_uLong>(nC)-1) * nR) 
+ nRow))) == CellState::Free )
-        {   // mark row as totally unused
-            *p = CellState::Glue;
-            bGlueRows = true; // one unused row at least
+        if ( bGlue )
+        {
+            p = pA.get() + (((static_cast<sal_uLong>(nC)-1) * nR) + nRow);
+            if (*p == CellState::Free )
+            {   // mark row as totally unused
+                *p = CellState::Glue;
+                bGlueRows = true; // one unused row at least
+            }
         }
     }
 
diff --git a/sc/source/core/tool/chgtrack.cxx b/sc/source/core/tool/chgtrack.cxx
index a29e21d244c0..a6524f95da7d 100644
--- a/sc/source/core/tool/chgtrack.cxx
+++ b/sc/source/core/tool/chgtrack.cxx
@@ -370,9 +370,8 @@ bool ScChangeAction::IsDeletedInDelType( ScChangeActionType 
eDelType ) const
         }
         while ( pL )
         {
-            ScChangeAction* p;
-            if ( (p = pL->GetAction()) != nullptr &&
-                    (p->GetType() == eDelType || p->GetType() == eInsType) )
+            ScChangeAction* p = pL->GetAction();
+            if ( p != nullptr && (p->GetType() == eDelType || p->GetType() == 
eInsType) )
                 return true;
             pL = pL->GetNext();
         }
@@ -3654,9 +3653,13 @@ void ScChangeTrack::UpdateReference( ScChangeAction** 
ppFirstAction,
                         // Split up the ContentChain
                         ScChangeActionContent *pHere, *pTmp;
                         pHere = static_cast<ScChangeActionContent*>(p);
-                        while ( (pTmp = pHere->GetPrevContent()) != nullptr &&
-                                pTmp->GetActionNumber() > nEndLastCut )
+                        for (;;)
+                        {
+                            pTmp = pHere->GetPrevContent();
+                            if (!pTmp || pTmp->GetActionNumber() <= 
nEndLastCut)
+                                break;
                             pHere = pTmp;
+                        }
                         if ( pTmp )
                         {   // Becomes TopContent of the Move
                             pTmp->SetNextContent( nullptr );
@@ -3888,9 +3891,14 @@ void ScChangeTrack::GetDependents( ScChangeAction* pAct,
                     // if this Delete is at the top of a Row
                     ScChangeActionType eType = pDel->GetType();
                     ScChangeAction* p = pDel;
-                    while ( (p = p->GetPrev()) != nullptr && p->GetType() == 
eType &&
-                            !static_cast<ScChangeActionDel*>(p)->IsTopDelete() 
)
+                    for (;;)
+                    {
+                        p = p->GetPrev();
+                        if (!p || p->GetType() != eType ||
+                            static_cast<ScChangeActionDel*>(p)->IsTopDelete() )
+                            break;
                         rMap.insert( ::std::make_pair( p->GetActionNumber(), p 
) );
+                    }
                     // delete this in the map too
                     rMap.insert( ::std::make_pair( pAct->GetActionNumber(), 
pAct ) );
                 }
@@ -4030,10 +4038,13 @@ bool ScChangeTrack::SelectContent( ScChangeAction* 
pAct, bool bOldest )
     if ( bOldest )
     {
         pContent = pContent->GetTopContent();
-        ScChangeActionContent* pPrevContent;
-        while ( (pPrevContent = pContent->GetPrevContent()) != nullptr &&
-                pPrevContent->IsVirgin() )
+        for (;;)
+        {
+            ScChangeActionContent* pPrevContent = pContent->GetPrevContent();
+            if ( !pPrevContent || !pPrevContent->IsVirgin() )
+                break;
             pContent = pPrevContent;
+        }
     }
 
     if ( !pContent->IsClickable() )
diff --git a/sc/source/core/tool/compiler.cxx b/sc/source/core/tool/compiler.cxx
index 0c1e9e5d07bb..8217c6a411e8 100644
--- a/sc/source/core/tool/compiler.cxx
+++ b/sc/source/core/tool/compiler.cxx
@@ -2954,8 +2954,10 @@ bool ScCompiler::IsOpCode( const OUString& rName, bool 
bInArray )
             bFound = true;
         }
     }
-    OpCode eOp;
-    if (bFound && ((eOp = maRawToken.GetOpCode()) == ocSub || eOp == ocNegSub))
+    if (!bFound)
+        return false;
+    OpCode eOp = maRawToken.GetOpCode();
+    if (eOp == ocSub || eOp == ocNegSub)
     {
         bool bShouldBeNegSub =
             (eLastOp == ocOpen || eLastOp == ocSep || eLastOp == ocNegSub ||
@@ -4026,12 +4028,14 @@ void ScCompiler::AutoCorrectParsedSymbol()
         {
             OUString aSymbol( aCorrectedSymbol );
             OUString aDoc;
-            sal_Int32 nPosition;
-            if ( aSymbol[0] == '\''
-              && ((nPosition = aSymbol.indexOf( "'#" )) != -1) )
-            {   // Split off 'Doc'#, may be d:\... or whatever
-                aDoc = aSymbol.copy(0, nPosition + 2);
-                aSymbol = aSymbol.copy(nPosition + 2);
+            if ( aSymbol[0] == '\'' )
+            {
+                sal_Int32 nPosition = aSymbol.indexOf( "'#" );
+                if (nPosition != -1)
+                {   // Split off 'Doc'#, may be d:\... or whatever
+                    aDoc = aSymbol.copy(0, nPosition + 2);
+                    aSymbol = aSymbol.copy(nPosition + 2);
+                }
             }
             sal_Int32 nRefs = comphelper::string::getTokenCount(aSymbol, ':');
             bool bColons;
diff --git a/sc/source/core/tool/interpr1.cxx b/sc/source/core/tool/interpr1.cxx
index 4daf1afaa169..8f54c25d258b 100644
--- a/sc/source/core/tool/interpr1.cxx
+++ b/sc/source/core/tool/interpr1.cxx
@@ -8180,8 +8180,8 @@ void ScInterpreter::ScIndirect()
             // Anything else that resolves to one reference could be added
             // here, but we don't want to compile every arbitrary string. This
             // is already nasty enough...
-            sal_Int32 nIndex = 0;
-            if ((nIndex = sRefStr.indexOf('[')) >= 0 && 
sRefStr.indexOf(']',nIndex+1) > nIndex)
+            sal_Int32 nIndex = sRefStr.indexOf('[');
+            if (nIndex >= 0 && sRefStr.indexOf(']',nIndex+1) > nIndex)
             {
                 do
                 {
diff --git a/sc/source/core/tool/interpr4.cxx b/sc/source/core/tool/interpr4.cxx
index f1506f60adeb..2be1e335a40e 100644
--- a/sc/source/core/tool/interpr4.cxx
+++ b/sc/source/core/tool/interpr4.cxx
@@ -3711,19 +3711,22 @@ void ScInterpreter::ScColRowNameAuto()
         if (aAbs.aEnd.Row() > nRow2)
             aAbs.aEnd.SetRow(nRow2);
         SCROW nMyRow;
-        if ( aPos.Col() == nStartCol
-          && nStartRow <= (nMyRow = aPos.Row()) && nMyRow <= aAbs.aEnd.Row())
-        {   //Formula in the same column and within the range
-            if ( nMyRow == nStartRow )
-            {   // take the rest under the name
-                nStartRow++;
-                if ( nStartRow > pDok->MaxRow() )
-                    nStartRow = pDok->MaxRow();
-                aAbs.aStart.SetRow(nStartRow);
-            }
-            else
-            {   // below the name to the formula cell
-                aAbs.aEnd.SetRow(nMyRow - 1);
+        if ( aPos.Col() == nStartCol )
+        {
+            nMyRow = aPos.Row();
+            if ( nStartRow <= nMyRow && nMyRow <= aAbs.aEnd.Row())
+            {   //Formula in the same column and within the range
+                if ( nMyRow == nStartRow )
+                {   // take the rest under the name
+                    nStartRow++;
+                    if ( nStartRow > pDok->MaxRow() )
+                        nStartRow = pDok->MaxRow();
+                    aAbs.aStart.SetRow(nStartRow);
+                }
+                else
+                {   // below the name to the formula cell
+                    aAbs.aEnd.SetRow(nMyRow - 1);
+                }
             }
         }
     }
@@ -3734,19 +3737,22 @@ void ScInterpreter::ScColRowNameAuto()
         if (aAbs.aEnd.Col() > nCol2)
             aAbs.aEnd.SetCol(nCol2);
         SCCOL nMyCol;
-        if ( aPos.Row() == nStartRow
-          && nStartCol <= (nMyCol = aPos.Col()) && nMyCol <= aAbs.aEnd.Col())
-        {   //Formula in the same column and within the range
-            if ( nMyCol == nStartCol )
-            {    // take the rest under the name
-                nStartCol++;
-                if ( nStartCol > pDok->MaxCol() )
-                    nStartCol = pDok->MaxCol();
-                aAbs.aStart.SetCol(nStartCol);
-            }
-            else
-            {   // below the name to the formula cell
-                aAbs.aEnd.SetCol(nMyCol - 1);
+        if ( aPos.Row() == nStartRow )
+        {
+            nMyCol = aPos.Col();
+            if (nStartCol <= nMyCol && nMyCol <= aAbs.aEnd.Col())
+            {   //Formula in the same column and within the range
+                if ( nMyCol == nStartCol )
+                {    // take the rest under the name
+                    nStartCol++;
+                    if ( nStartCol > pDok->MaxCol() )
+                        nStartCol = pDok->MaxCol();
+                    aAbs.aStart.SetCol(nStartCol);
+                }
+                else
+                {   // below the name to the formula cell
+                    aAbs.aEnd.SetCol(nMyCol - 1);
+                }
             }
         }
     }
@@ -3966,9 +3972,11 @@ StackVar ScInterpreter::Interpret()
 
     OpCode eOp = ocNone;
     aCode.Reset();
-    while( ( pCur = aCode.Next() ) != nullptr
-            && (nGlobalError == FormulaError::NONE || nErrorFunction <= 
nErrorFunctionCount) )
+    for (;;)
     {
+        pCur = aCode.Next();
+        if (!pCur || (nGlobalError != FormulaError::NONE && nErrorFunction > 
nErrorFunctionCount) )
+            break;
         eOp = pCur->GetOpCode();
         cPar = pCur->GetByte();
         if ( eOp == ocPush )
diff --git a/sc/source/core/tool/token.cxx b/sc/source/core/tool/token.cxx
index fc08062c965f..2e4977ced2ee 100644
--- a/sc/source/core/tool/token.cxx
+++ b/sc/source/core/tool/token.cxx
@@ -657,9 +657,10 @@ const ScRefList*        ScRefListToken::GetRefList() const 
 { return &aRefList;
       bool              ScRefListToken::IsArrayResult() const { return 
mbArrayResult; }
 bool ScRefListToken::operator==( const FormulaToken& r ) const
 {
-    const ScRefListToken* p;
-    return FormulaToken::operator==( r ) && &aRefList == r.GetRefList() &&
-        ((p = dynamic_cast<const ScRefListToken*>(&r)) != nullptr) && 
mbArrayResult == p->IsArrayResult();
+    if (!FormulaToken::operator==( r ) || &aRefList != r.GetRefList())
+        return false;
+    const ScRefListToken* p = dynamic_cast<const ScRefListToken*>(&r);
+    return p && mbArrayResult == p->IsArrayResult();
 }
 
 ScMatrixToken::ScMatrixToken( const ScMatrixRef& p ) :
@@ -2168,22 +2169,26 @@ void ScTokenArray::MergeRangeReference( const ScAddress 
& rPos )
     if (!pCode || !nLen)
         return;
     sal_uInt16 nIdx = nLen;
-    FormulaToken *p1, *p2, *p3;      // ref, ocRange, ref
+
     // The actual types are checked in extendRangeReference().
-    if (((p3 = PeekPrev(nIdx)) != nullptr) &&
-            (((p2 = PeekPrev(nIdx)) != nullptr) && p2->GetOpCode() == ocRange) 
&&
-            ((p1 = PeekPrev(nIdx)) != nullptr))
+    FormulaToken *p3 = PeekPrev(nIdx); // ref
+    if (!p3)
+        return;
+    FormulaToken *p2 = PeekPrev(nIdx); // ocRange
+    if (!p2 || p2->GetOpCode() != ocRange)
+        return;
+    FormulaToken *p1 = PeekPrev(nIdx); // ref
+    if (!p1)
+        return;
+    FormulaTokenRef p = extendRangeReference( *mxSheetLimits, *p1, *p3, rPos, 
true);
+    if (p)
     {
-        FormulaTokenRef p = extendRangeReference( *mxSheetLimits, *p1, *p3, 
rPos, true);
-        if (p)
-        {
-            p->IncRef();
-            p1->DecRef();
-            p2->DecRef();
-            p3->DecRef();
-            nLen -= 2;
-            pCode[ nLen-1 ] = p.get();
-        }
+        p->IncRef();
+        p1->DecRef();
+        p2->DecRef();
+        p3->DecRef();
+        nLen -= 2;
+        pCode[ nLen-1 ] = p.get();
     }
 }
 
@@ -2267,28 +2272,28 @@ bool ScTokenArray::GetAdjacentExtendOfOuterFuncRefs( 
SCCOLROW& nExtend,
     switch ( eDir )
     {
         case DIR_BOTTOM :
-            if ( rPos.Row() < mxSheetLimits->mnMaxRow )
-                nRow = (nExtend = rPos.Row()) + 1;
-            else
+            if ( rPos.Row() >= mxSheetLimits->mnMaxRow )
                 return false;
+            nExtend = rPos.Row();
+            nRow = nExtend + 1;
         break;
         case DIR_RIGHT :
-            if ( rPos.Col() < mxSheetLimits->mnMaxCol )
-                nCol = static_cast<SCCOL>(nExtend = rPos.Col()) + 1;
-            else
+            if ( rPos.Col() >= mxSheetLimits->mnMaxCol )
                 return false;
+            nExtend = rPos.Col();
+            nCol = static_cast<SCCOL>(nExtend) + 1;
         break;
         case DIR_TOP :
-            if ( rPos.Row() > 0 )
-                nRow = (nExtend = rPos.Row()) - 1;
-            else
+            if ( rPos.Row() <= 0 )
                 return false;
+            nExtend = rPos.Row();
+            nRow = nExtend - 1;
         break;
         case DIR_LEFT :
-            if ( rPos.Col() > 0 )
-                nCol = static_cast<SCCOL>(nExtend = rPos.Col()) - 1;
-            else
+            if ( rPos.Col() <= 0 )
                 return false;
+            nExtend = rPos.Col();
+            nCol = static_cast<SCCOL>(nExtend) - 1;
         break;
         default:
             OSL_FAIL( "unknown Direction" );
diff --git a/sc/source/filter/excel/xeformula.cxx 
b/sc/source/filter/excel/xeformula.cxx
index 9990155ea2e0..72dcfa8124be 100644
--- a/sc/source/filter/excel/xeformula.cxx
+++ b/sc/source/filter/excel/xeformula.cxx
@@ -722,17 +722,26 @@ void XclExpFmlaCompImpl::RecalcTokenClass( const 
XclExpTokenConvInfo& rConvInfo,
                 their original token class.
                 Array and defined name formulas: convert VAL to ARR. */
             if( (mxData->mrCfg.meClassType != EXC_CLASSTYPE_CELL) && 
(nTokClass == EXC_TOKCLASS_VAL) )
-                ChangeTokenClass( rnTokenId, nTokClass = EXC_TOKCLASS_ARR );
+            {
+                nTokClass = EXC_TOKCLASS_ARR;
+                ChangeTokenClass( rnTokenId, nTokClass );
+            }
         break;
         case EXC_CLASSCONV_VAL:
             // convert ARR to VAL
             if( nTokClass == EXC_TOKCLASS_ARR )
-                ChangeTokenClass( rnTokenId, nTokClass = EXC_TOKCLASS_VAL );
+            {
+                nTokClass = EXC_TOKCLASS_VAL;
+                ChangeTokenClass( rnTokenId, nTokClass );
+            }
         break;
         case EXC_CLASSCONV_ARR:
             // convert VAL to ARR
             if( nTokClass == EXC_TOKCLASS_VAL )
-                ChangeTokenClass( rnTokenId, nTokClass = EXC_TOKCLASS_ARR );
+            {
+                nTokClass = EXC_TOKCLASS_ARR;
+                ChangeTokenClass( rnTokenId, nTokClass );
+            }
         break;
     }
 
@@ -989,9 +998,11 @@ XclExpScToken XclExpFmlaCompImpl::AndTerm( XclExpScToken 
aTokData, bool bInParen
 XclExpScToken XclExpFmlaCompImpl::CompareTerm( XclExpScToken aTokData, bool 
bInParentheses )
 {
     aTokData = ConcatTerm( aTokData, bInParentheses );
-    sal_uInt8 nOpTokenId = EXC_TOKID_NONE;
-    while( mxData->mbOk && ((nOpTokenId = lclGetCompareTokenId( 
aTokData.GetOpCode() )) != EXC_TOKID_NONE) )
+    while( mxData->mbOk )
     {
+        sal_uInt8 nOpTokenId = lclGetConcatTokenId( aTokData.GetOpCode() );
+        if (nOpTokenId == EXC_TOKID_NONE)
+            break;
         sal_uInt8 nSpaces = aTokData.mnSpaces;
         aTokData = ConcatTerm( GetNextToken(), bInParentheses );
         AppendBinaryOperatorToken( nOpTokenId, true, nSpaces );
@@ -1002,9 +1013,11 @@ XclExpScToken XclExpFmlaCompImpl::CompareTerm( 
XclExpScToken aTokData, bool bInP
 XclExpScToken XclExpFmlaCompImpl::ConcatTerm( XclExpScToken aTokData, bool 
bInParentheses )
 {
     aTokData = AddSubTerm( aTokData, bInParentheses );
-    sal_uInt8 nOpTokenId = EXC_TOKID_NONE;
-    while( mxData->mbOk && ((nOpTokenId = lclGetConcatTokenId( 
aTokData.GetOpCode() )) != EXC_TOKID_NONE) )
+    while( mxData->mbOk )
     {
+        sal_uInt8 nOpTokenId = lclGetCompareTokenId( aTokData.GetOpCode() );
+        if (nOpTokenId == EXC_TOKID_NONE)
+            break;
         sal_uInt8 nSpaces = aTokData.mnSpaces;
         aTokData = AddSubTerm( GetNextToken(), bInParentheses );
         AppendBinaryOperatorToken( nOpTokenId, true, nSpaces );
@@ -1015,9 +1028,11 @@ XclExpScToken XclExpFmlaCompImpl::ConcatTerm( 
XclExpScToken aTokData, bool bInPa
 XclExpScToken XclExpFmlaCompImpl::AddSubTerm( XclExpScToken aTokData, bool 
bInParentheses )
 {
     aTokData = MulDivTerm( aTokData, bInParentheses );
-    sal_uInt8 nOpTokenId = EXC_TOKID_NONE;
-    while( mxData->mbOk && ((nOpTokenId = lclGetAddSubTokenId( 
aTokData.GetOpCode() )) != EXC_TOKID_NONE) )
+    while( mxData->mbOk )
     {
+        sal_uInt8 nOpTokenId = lclGetAddSubTokenId( aTokData.GetOpCode() );
+        if (nOpTokenId == EXC_TOKID_NONE)
+            break;
         sal_uInt8 nSpaces = aTokData.mnSpaces;
         aTokData = MulDivTerm( GetNextToken(), bInParentheses );
         AppendBinaryOperatorToken( nOpTokenId, true, nSpaces );
@@ -1028,9 +1043,11 @@ XclExpScToken XclExpFmlaCompImpl::AddSubTerm( 
XclExpScToken aTokData, bool bInPa
 XclExpScToken XclExpFmlaCompImpl::MulDivTerm( XclExpScToken aTokData, bool 
bInParentheses )
 {
     aTokData = PowTerm( aTokData, bInParentheses );
-    sal_uInt8 nOpTokenId = EXC_TOKID_NONE;
-    while( mxData->mbOk && ((nOpTokenId = lclGetMulDivTokenId( 
aTokData.GetOpCode() )) != EXC_TOKID_NONE) )
+    while( mxData->mbOk )
     {
+        sal_uInt8 nOpTokenId = lclGetMulDivTokenId( aTokData.GetOpCode() );
+        if (nOpTokenId == EXC_TOKID_NONE)
+            break;
         sal_uInt8 nSpaces = aTokData.mnSpaces;
         aTokData = PowTerm( GetNextToken(), bInParentheses );
         AppendBinaryOperatorToken( nOpTokenId, true, nSpaces );
@@ -1042,8 +1059,11 @@ XclExpScToken XclExpFmlaCompImpl::PowTerm( XclExpScToken 
aTokData, bool bInParen
 {
     aTokData = UnaryPostTerm( aTokData, bInParentheses );
     sal_uInt8 nOpTokenId = EXC_TOKID_NONE;
-    while( mxData->mbOk && ((nOpTokenId = lclGetPowTokenId( 
aTokData.GetOpCode() )) != EXC_TOKID_NONE) )
+    while( mxData->mbOk )
     {
+        nOpTokenId = lclGetPowTokenId( aTokData.GetOpCode() );
+        if (nOpTokenId == EXC_TOKID_NONE)
+            break;
         sal_uInt8 nSpaces = aTokData.mnSpaces;
         aTokData = UnaryPostTerm( GetNextToken(), bInParentheses );
         AppendBinaryOperatorToken( nOpTokenId, true, nSpaces );
@@ -1055,8 +1075,11 @@ XclExpScToken XclExpFmlaCompImpl::UnaryPostTerm( 
XclExpScToken aTokData, bool bI
 {
     aTokData = UnaryPreTerm( aTokData, bInParentheses );
     sal_uInt8 nOpTokenId = EXC_TOKID_NONE;
-    while( mxData->mbOk && ((nOpTokenId = lclGetUnaryPostTokenId( 
aTokData.GetOpCode() )) != EXC_TOKID_NONE) )
+    while( mxData->mbOk )
     {
+        nOpTokenId = lclGetUnaryPostTokenId( aTokData.GetOpCode() );
+        if (nOpTokenId == EXC_TOKID_NONE)
+            break;
         AppendUnaryOperatorToken( nOpTokenId, aTokData.mnSpaces );
         GetNextToken( aTokData );
     }
@@ -1085,9 +1108,11 @@ XclExpScToken XclExpFmlaCompImpl::ListTerm( 
XclExpScToken aTokData, bool bInPare
     bool bHasAnyRefOp = false;
     bool bHasListOp = false;
     aTokData = IntersectTerm( aTokData, bHasAnyRefOp );
-    sal_uInt8 nOpTokenId = EXC_TOKID_NONE;
-    while( mxData->mbOk && ((nOpTokenId = lclGetListTokenId( 
aTokData.GetOpCode(), mxData->mbStopAtSep )) != EXC_TOKID_NONE) )
+    while( mxData->mbOk )
     {
+        sal_uInt8 nOpTokenId = lclGetListTokenId( aTokData.GetOpCode(), 
mxData->mbStopAtSep );
+        if (nOpTokenId == EXC_TOKID_NONE)
+            break;
         sal_uInt8 nSpaces = aTokData.mnSpaces;
         aTokData = IntersectTerm( GetNextToken(), bHasAnyRefOp );
         AppendBinaryOperatorToken( nOpTokenId, false, nSpaces );
@@ -1114,9 +1139,11 @@ XclExpScToken XclExpFmlaCompImpl::ListTerm( 
XclExpScToken aTokData, bool bInPare
 XclExpScToken XclExpFmlaCompImpl::IntersectTerm( XclExpScToken aTokData, bool& 
rbHasRefOp )
 {
     aTokData = RangeTerm( aTokData, rbHasRefOp );
-    sal_uInt8 nOpTokenId = EXC_TOKID_NONE;
-    while( mxData->mbOk && ((nOpTokenId = lclGetIntersectTokenId( 
aTokData.GetOpCode() )) != EXC_TOKID_NONE) )
+    while( mxData->mbOk )
     {
+        sal_uInt8 nOpTokenId = lclGetIntersectTokenId( aTokData.GetOpCode() );
+        if (nOpTokenId ==EXC_TOKID_NONE)
+            break;
         sal_uInt8 nSpaces = aTokData.mnSpaces;
         aTokData = RangeTerm( GetNextToken(), rbHasRefOp );
         AppendBinaryOperatorToken( nOpTokenId, false, nSpaces );
@@ -1128,9 +1155,11 @@ XclExpScToken XclExpFmlaCompImpl::IntersectTerm( 
XclExpScToken aTokData, bool& r
 XclExpScToken XclExpFmlaCompImpl::RangeTerm( XclExpScToken aTokData, bool& 
rbHasRefOp )
 {
     aTokData = Factor( aTokData );
-    sal_uInt8 nOpTokenId = EXC_TOKID_NONE;
-    while( mxData->mbOk && ((nOpTokenId = lclGetRangeTokenId( 
aTokData.GetOpCode() )) != EXC_TOKID_NONE) )
+    while( mxData->mbOk )
     {
+        sal_uInt8 nOpTokenId = lclGetRangeTokenId( aTokData.GetOpCode() );
+        if (nOpTokenId == EXC_TOKID_NONE)
+            break;
         sal_uInt8 nSpaces = aTokData.mnSpaces;
         aTokData = Factor( GetNextToken() );
         AppendBinaryOperatorToken( nOpTokenId, false, nSpaces );
diff --git a/sc/source/filter/excel/xetable.cxx 
b/sc/source/filter/excel/xetable.cxx
index bf2b66808aee..d23cb5f083ad 100644
--- a/sc/source/filter/excel/xetable.cxx
+++ b/sc/source/filter/excel/xetable.cxx
@@ -170,7 +170,9 @@ XclExpArrayRef XclExpArrayBuffer::FindArray( const 
ScTokenArray& rScTokArr, cons
     ScAddress aAbsPos = rRef.toAbs(&GetRoot().GetDoc(), rBasePos);
     XclExpArrayMap::const_iterator it = maRecMap.find(aAbsPos);
 
-    return (it == maRecMap.end()) ? xRec : xRec = it->second;
+    if (it != maRecMap.end())
+        xRec = it->second;
+    return xRec;
 }
 
 // Shared formulas ============================================================
diff --git a/sc/source/filter/html/htmlpars.cxx 
b/sc/source/filter/html/htmlpars.cxx
index 8e4a1dd6d63d..02c60140b844 100644
--- a/sc/source/filter/html/htmlpars.cxx
+++ b/sc/source/filter/html/htmlpars.cxx
@@ -1894,10 +1894,10 @@ const SfxItemSet& ScHTMLTable::GetCurrItemSet() const
 ScHTMLSize ScHTMLTable::GetSpan( const ScHTMLPos& rCellPos ) const
 {
     ScHTMLSize aSpan( 1, 1 );
-    const ScRange* pRange = nullptr;
-    if(  ( (pRange = maVMergedCells.Find( rCellPos.MakeAddr() ) ) != nullptr)
-      || ( (pRange = maHMergedCells.Find( rCellPos.MakeAddr() ) ) != nullptr)
-      )
+    const ScRange* pRange = maVMergedCells.Find( rCellPos.MakeAddr() );
+    if (!pRange)
+        pRange = maHMergedCells.Find( rCellPos.MakeAddr() );
+    if (pRange)
         aSpan.Set( pRange->aEnd.Col() - pRange->aStart.Col() + 1, 
pRange->aEnd.Row() - pRange->aStart.Row() + 1 );
     return aSpan;
 }
@@ -2386,8 +2386,15 @@ void ScHTMLTable::InsertNewCell( const ScHTMLSize& 
rSpanSize )
 
     /*  Find an unused cell by skipping all merged ranges that cover the
         current cell position stored in maCurrCell. */
-    while( ((pRange = maVMergedCells.Find( maCurrCell.MakeAddr() )) != 
nullptr) || ((pRange = maHMergedCells.Find( maCurrCell.MakeAddr() )) != 
nullptr) )
+    for (;;)
+    {
+        pRange = maVMergedCells.Find( maCurrCell.MakeAddr() );
+        if (!pRange)
+            pRange = maHMergedCells.Find( maCurrCell.MakeAddr() );
+        if (!pRange)
+            break;
         maCurrCell.mnCol = pRange->aEnd.Col() + 1;
+    }
     mpCurrEntryVector = &maEntryMap[ maCurrCell ];
 
     /*  If the new cell is merged horizontally, try to find collisions with
diff --git a/sc/source/filter/oox/formulabase.cxx 
b/sc/source/filter/oox/formulabase.cxx
index 6d8d884c767d..b2c074a1d277 100644
--- a/sc/source/filter/oox/formulabase.cxx
+++ b/sc/source/filter/oox/formulabase.cxx
@@ -1544,7 +1544,7 @@ OUString FormulaProcessorBase::generateAddress2dString( 
const BinAddress& rAddre
 {
     OUStringBuffer aBuffer;
     // column
-    for( sal_Int32 nTemp = rAddress.mnCol; nTemp >= 0; (nTemp /= 26) -= 1 )
+    for( sal_Int32 nTemp = rAddress.mnCol; nTemp >= 0; nTemp = (nTemp / 26) - 
1 )
         aBuffer.insert( 0, sal_Unicode( 'A' + (nTemp % 26) ) );
     if( bAbsolute )
         aBuffer.insert( 0, '$' );
diff --git a/sc/source/ui/app/drwtrans.cxx b/sc/source/ui/app/drwtrans.cxx
index 9b6529b18601..ac338fa2c115 100644
--- a/sc/source/ui/app/drwtrans.cxx
+++ b/sc/source/ui/app/drwtrans.cxx
@@ -142,17 +142,18 @@ ScDrawTransferObj::ScDrawTransferObj( 
std::unique_ptr<SdrModel> pClipModel, ScDo
                                 if ( (aAny >>= sTmp) && !sTmp.isEmpty() )
                                 {
                                     OUString aUrl = sTmp;
-                                    OUString aAbs;
-                                    const SfxMedium* pMedium;
-                                    if (pContainerShell && (pMedium = 
pContainerShell->GetMedium()) != nullptr)
+                                    OUString aAbs = aUrl;
+                                    if (pContainerShell)
                                     {
-                                        bool bWasAbs = true;
-                                        aAbs = 
pMedium->GetURLObject().smartRel2Abs( aUrl, bWasAbs ).
-                                                    
GetMainURL(INetURLObject::DecodeMechanism::NONE);
-                                        // full path as stored INetBookmark 
must be encoded
+                                        const SfxMedium* pMedium = 
pContainerShell->GetMedium();
+                                        if (pMedium)
+                                        {
+                                            bool bWasAbs = true;
+                                            aAbs = 
pMedium->GetURLObject().smartRel2Abs( aUrl, bWasAbs ).
+                                                        
GetMainURL(INetURLObject::DecodeMechanism::NONE);
+                                            // full path as stored 
INetBookmark must be encoded
+                                        }
                                     }
-                                    else
-                                        aAbs = aUrl;
 
                                     // Label
                                     OUString aLabel;
diff --git a/sc/source/ui/app/inputhdl.cxx b/sc/source/ui/app/inputhdl.cxx
index bea2cc244eb3..530ad88ab0b7 100644
--- a/sc/source/ui/app/inputhdl.cxx
+++ b/sc/source/ui/app/inputhdl.cxx
@@ -3265,8 +3265,13 @@ void ScInputHandler::AddRefEntry()
     OUString aText = GetEditText(mpEditEngine.get());
     sal_Unicode cLastChar = 0;
     sal_Int32 nPos = aText.getLength() - 1;
-    while (nPos >= 0 && ((cLastChar = aText[nPos]) == ' ')) //checking space
+    while (nPos >= 0) //checking space
+    {
+        cLastChar = aText[nPos];
+        if (cLastChar != ' ')
+            break;
         --nPos;
+    }
 
     bool bAppendSeparator = (cLastChar != '(' && cLastChar != cSep && 
cLastChar != '=');
     if (bAppendSeparator)
@@ -3285,7 +3290,9 @@ void ScInputHandler::SetReference( const ScRange& rRef, 
const ScDocument& rDoc )
     HideTip();
 
     const ScDocument* pThisDoc = nullptr;
-    bool bOtherDoc = (pRefViewSh && ((pThisDoc = 
pRefViewSh->GetViewData().GetDocument()) != &rDoc));
+    if (pRefViewSh)
+        pThisDoc = pRefViewSh->GetViewData().GetDocument();
+    bool bOtherDoc = (pThisDoc != &rDoc);
     if (bOtherDoc && !rDoc.GetDocumentShell()->HasName())
     {
         // References to unnamed document; that doesn't work
diff --git a/sc/source/ui/app/seltrans.cxx b/sc/source/ui/app/seltrans.cxx
index a2f4b44c8c45..1757b64749bd 100644
--- a/sc/source/ui/app/seltrans.cxx
+++ b/sc/source/ui/app/seltrans.cxx
@@ -114,16 +114,17 @@ ScSelectionTransferObj* 
ScSelectionTransferObj::CreateFromView( ScTabView* pView
                 //  allow MultiMarked because GetSimpleArea may be able to 
merge into a simple range
                 //  (GetSimpleArea modifies a local copy of MarkData)
                 // Also allow simple filtered area.
-                ScMarkType eMarkType;
-                if ( ( rMark.IsMarked() || rMark.IsMultiMarked() ) &&
-                        (((eMarkType = rViewData.GetSimpleArea( aRange )) == 
SC_MARK_SIMPLE) ||
-                         (eMarkType == SC_MARK_SIMPLE_FILTERED)) )
+                if ( rMark.IsMarked() || rMark.IsMultiMarked() )
                 {
-                    //  only for "real" selection, cursor alone isn't used
-                    if ( aRange.aStart == aRange.aEnd )
-                        eMode = SC_SELTRANS_CELL;
-                    else
-                        eMode = SC_SELTRANS_CELLS;
+                    ScMarkType eMarkType = rViewData.GetSimpleArea( aRange );
+                    if (eMarkType == SC_MARK_SIMPLE || eMarkType == 
SC_MARK_SIMPLE_FILTERED)
+                    {
+                        //  only for "real" selection, cursor alone isn't used
+                        if ( aRange.aStart == aRange.aEnd )
+                            eMode = SC_SELTRANS_CELL;
+                        else
+                            eMode = SC_SELTRANS_CELLS;
+                    }
                 }
             }
 
diff --git a/sc/source/ui/dbgui/csvgrid.cxx b/sc/source/ui/dbgui/csvgrid.cxx
index c69b35ac9a1e..dad4e9f2d299 100644
--- a/sc/source/ui/dbgui/csvgrid.cxx
+++ b/sc/source/ui/dbgui/csvgrid.cxx
@@ -156,7 +156,13 @@ void ScCsvGrid::UpdateOffsetX()
 {
     sal_Int32 nLastLine = GetLastVisLine() + 1;
     sal_Int32 nDigits = 2;
-    while( nLastLine /= 10 ) ++nDigits;
+    for (;;)
+    {
+        nLastLine /= 10;
+        if (!nLastLine)
+            break;
+        ++nDigits;
+    }
     nDigits = std::max( nDigits, sal_Int32( 3 ) );
     Execute(CSVCMD_SETHDRWIDTH, 
GetDrawingArea()->get_approximate_digit_width() * nDigits);
 }
diff --git a/sc/source/ui/dbgui/validate.cxx b/sc/source/ui/dbgui/validate.cxx
index 9e1e2693644d..0c1f63cabdfd 100644
--- a/sc/source/ui/dbgui/validate.cxx
+++ b/sc/source/ui/dbgui/validate.cxx
@@ -862,7 +862,8 @@ bool ScValidationDlg::SetupRefDlg()
     if( EnterRefMode() )
     {
         SetModal( false );
-        return  m_bOwnRefHdlr = true && EnterRefStatus();
+        m_bOwnRefHdlr = true;
+        return EnterRefStatus();
     }
 
     return false;
diff --git a/sc/source/ui/docshell/docsh8.cxx b/sc/source/ui/docshell/docsh8.cxx
index 0dc7570d6d54..d4bfa92931f3 100644
--- a/sc/source/ui/docshell/docsh8.cxx
+++ b/sc/source/ui/docshell/docsh8.cxx
@@ -999,10 +999,12 @@ ErrCode ScDocShell::DBaseExport( const OUString& 
rFullFileName, rtl_TextEncoding
             const sal_Int32* pColLengths = aColLengths.getConstArray();
             ScHorizontalCellIterator aIter( &m_aDocument, nTab, nFirstCol,
                     nDocRow, nLastCol, nDocRow);
-            ScRefCellValue* pCell = nullptr;
             bool bTest = true;
-            while (bTest && ((pCell = aIter.GetNext( nDocCol, nDocRow)) != 
nullptr))
+            while (bTest)
             {
+                ScRefCellValue* pCell = aIter.GetNext( nDocCol, nDocRow);
+                if (!pCell)
+                    break;
                 SCCOL nCol = nDocCol - nFirstCol;
                 switch (pColTypes[nCol])
                 {
diff --git a/sc/source/ui/miscdlgs/anyrefdg.cxx 
b/sc/source/ui/miscdlgs/anyrefdg.cxx
index 0fa7bff3634d..a5149123db4f 100644
--- a/sc/source/ui/miscdlgs/anyrefdg.cxx
+++ b/sc/source/ui/miscdlgs/anyrefdg.cxx
@@ -612,7 +612,8 @@ bool ScRefHandler::EnterRefMode()
 
     m_aHelper.SetDispatcherLock( true );
 
-    return m_bInRefMode = true;
+    m_bInRefMode = true;
+    return m_bInRefMode;
 }
 
 ScRefHandler::~ScRefHandler() COVERITY_NOEXCEPT_FALSE
diff --git a/sc/source/ui/view/dbfunc3.cxx b/sc/source/ui/view/dbfunc3.cxx
index 0093c96820f6..8b7782ed2e25 100644
--- a/sc/source/ui/view/dbfunc3.cxx
+++ b/sc/source/ui/view/dbfunc3.cxx
@@ -145,8 +145,11 @@ void ScDBFunc::TestRemoveOutline( bool& rCol, bool& rRow )
             {
                 ScOutlineArray& rArray = pTable->GetColArray();
                 ScSubOutlineIterator aColIter( &rArray );
-                while ((pEntry=aColIter.GetNext()) != nullptr && !bColFound)
+                while (bColFound)
                 {
+                    pEntry=aColIter.GetNext();
+                    if (!pEntry)
+                        break;
                     nStart = pEntry->GetStart();
                     nEnd   = pEntry->GetEnd();
                     if ( nStartCol<=static_cast<SCCOL>(nEnd) && 
nEndCol>=static_cast<SCCOL>(nStart) )
@@ -160,8 +163,11 @@ void ScDBFunc::TestRemoveOutline( bool& rCol, bool& rRow )
             {
                 ScOutlineArray& rArray = pTable->GetRowArray();
                 ScSubOutlineIterator aRowIter( &rArray );
-                while ((pEntry=aRowIter.GetNext()) != nullptr && !bRowFound)
+                while (!bRowFound)
                 {
+                    pEntry=aRowIter.GetNext();
+                    if (!pEntry)
+                        break;
                     nStart = pEntry->GetStart();
                     nEnd   = pEntry->GetEnd();
                     if ( nStartRow<=nEnd && nEndRow>=nStart )
@@ -284,7 +290,6 @@ bool ScDBFunc::OutlinePossible(bool bHide)
         ScOutlineTable* pTable = pDoc->GetOutlineTable( nTab );
         if (pTable)
         {
-            ScOutlineEntry* pEntry;
             SCCOLROW nStart;
             SCCOLROW nEnd;
 
@@ -292,8 +297,11 @@ bool ScDBFunc::OutlinePossible(bool bHide)
 
             ScOutlineArray& rColArray = pTable->GetColArray();
             ScSubOutlineIterator aColIter( &rColArray );
-            while ((pEntry=aColIter.GetNext()) != nullptr && !bEnable)
+            while (!bEnable)
             {
+                ScOutlineEntry* pEntry = aColIter.GetNext();
+                if (!pEntry)
+                    break;
                 nStart = pEntry->GetStart();
                 nEnd   = pEntry->GetEnd();
                 if ( bHide )
@@ -314,8 +322,11 @@ bool ScDBFunc::OutlinePossible(bool bHide)
 
             ScOutlineArray& rRowArray = pTable->GetRowArray();
             ScSubOutlineIterator aRowIter( &rRowArray );
-            while ((pEntry=aRowIter.GetNext()) != nullptr)
+            for (;;)
             {
+                ScOutlineEntry* pEntry = aRowIter.GetNext();
+                if (!pEntry)
+                    break;
                 nStart = pEntry->GetStart();
                 nEnd   = pEntry->GetEnd();
                 if ( bHide )
diff --git a/sc/source/ui/view/gridwin.cxx b/sc/source/ui/view/gridwin.cxx
index f1d64e6d639c..0fde9121afc8 100644
--- a/sc/source/ui/view/gridwin.cxx
+++ b/sc/source/ui/view/gridwin.cxx
@@ -2511,34 +2511,36 @@ void ScGridWindow::MouseMove( const MouseEvent& rMEvt )
 
         //  Page-Break-Mode
 
-        sal_uInt16 nBreakType;
-        if ( !nButtonDown && pViewData->IsPagebreakMode() &&
-                ( nBreakType = HitPageBreak( rMEvt.GetPosPixel(), nullptr, 
nullptr, nullptr ) ) != 0 )
+        if ( !nButtonDown && pViewData->IsPagebreakMode() )
         {
-            PointerStyle eNew = PointerStyle::Arrow;
-            switch ( nBreakType )
+            sal_uInt16 nBreakType = HitPageBreak( rMEvt.GetPosPixel(), 
nullptr, nullptr, nullptr );
+            if (nBreakType != 0 )
             {
-                case SC_PD_RANGE_L:
-                case SC_PD_RANGE_R:
-                case SC_PD_BREAK_H:
-                    eNew = PointerStyle::ESize;
-                    break;
-                case SC_PD_RANGE_T:
-                case SC_PD_RANGE_B:
-                case SC_PD_BREAK_V:
-                    eNew = PointerStyle::SSize;
-                    break;
-                case SC_PD_RANGE_TL:
-                case SC_PD_RANGE_BR:
-                    eNew = PointerStyle::SESize;
-                    break;
-                case SC_PD_RANGE_TR:
-                case SC_PD_RANGE_BL:
-                    eNew = PointerStyle::NESize;
-                    break;
+                PointerStyle eNew = PointerStyle::Arrow;
+                switch ( nBreakType )
+                {
+                    case SC_PD_RANGE_L:
+                    case SC_PD_RANGE_R:
+                    case SC_PD_BREAK_H:
+                        eNew = PointerStyle::ESize;
+                        break;
+                    case SC_PD_RANGE_T:
+                    case SC_PD_RANGE_B:
+                    case SC_PD_BREAK_V:
+                        eNew = PointerStyle::SSize;
+                        break;
+                    case SC_PD_RANGE_TL:
+                    case SC_PD_RANGE_BR:
+                        eNew = PointerStyle::SESize;
+                        break;
+                    case SC_PD_RANGE_TR:
+                    case SC_PD_RANGE_BL:
+                        eNew = PointerStyle::NESize;
+                        break;
+                }
+                SetPointer( eNew );
+                bCross = true;
             }
-            SetPointer( eNew );
-            bCross = true;
         }
 
         // Show fill cursor?
diff --git a/sc/source/ui/view/viewfun2.cxx b/sc/source/ui/view/viewfun2.cxx
index 697b8ae19736..09e5b87526cb 100644
--- a/sc/source/ui/view/viewfun2.cxx
+++ b/sc/source/ui/view/viewfun2.cxx
@@ -319,9 +319,11 @@ static bool lcl_FindNextSumEntryInColumn( ScDocument* 
pDoc, SCCOL nCol, SCROW& n
 {
     const SCROW nTmp = nRow;
     ScAutoSum eSkip = ScAutoSumNone;
-    while ( ( eSkip = lcl_IsAutoSumData( pDoc, nCol, nRow, nTab, DIR_TOP, 
nExtend ) ) == ScAutoSumData &&
-            nRow > nMinRow )
+    for (;;)
     {
+        eSkip = lcl_IsAutoSumData( pDoc, nCol, nRow, nTab, DIR_TOP, nExtend );
+        if (eSkip != ScAutoSumData || nRow <= nMinRow )
+            break;
         --nRow;
     }
     return eSkip >= ScAutoSumSum && nRow < nTmp;
@@ -332,9 +334,11 @@ static bool lcl_FindNextSumEntryInRow( ScDocument* pDoc, 
SCCOL& nCol, SCROW nRow
 {
     const SCCOL nTmp = nCol;
     ScAutoSum eSkip = ScAutoSumNone;
-    while ( ( eSkip = lcl_IsAutoSumData( pDoc, nCol, nRow, nTab, DIR_LEFT, 
nExtend ) ) == ScAutoSumData &&
-            nCol > nMinCol )
+    for (;;)
     {
+        eSkip = lcl_IsAutoSumData( pDoc, nCol, nRow, nTab, DIR_LEFT, nExtend );
+        if (eSkip != ScAutoSumData || nCol <= nMinCol )
+            break;
         --nCol;
     }
     return eSkip >= ScAutoSumSum && nCol < nTmp;
@@ -372,9 +376,11 @@ static ScAutoSum lcl_GetAutoSumForColumnRange( ScDocument* 
pDoc, ScRangeList& rR
     }
     else
     {
-        while ( nStartRow > aStart.Row() &&
-                (eSum = lcl_IsAutoSumData( pDoc, nCol, nStartRow-1, nTab, 
DIR_TOP, nExtend /*out*/ )) < ScAutoSumSum )
+        while ( nStartRow > aStart.Row() )
         {
+            eSum = lcl_IsAutoSumData( pDoc, nCol, nStartRow-1, nTab, DIR_TOP, 
nExtend /*out*/ );
+            if (eSum >= ScAutoSumSum )
+                break;
             --nStartRow;
         }
         rRangeList.push_back( ScRange( nCol, nStartRow, nTab, nCol, nEndRow, 
nTab ) );
@@ -417,9 +423,11 @@ static ScAutoSum lcl_GetAutoSumForRowRange( ScDocument* 
pDoc, ScRangeList& rRang
     }
     else
     {
-        while ( nStartCol > aStart.Col() &&
-                (eSum = lcl_IsAutoSumData( pDoc, nStartCol-1, nRow, nTab, 
DIR_LEFT, nExtend /*out*/ )) < ScAutoSumSum )
+        while ( nStartCol > aStart.Col() )
         {
+            eSum = lcl_IsAutoSumData( pDoc, nStartCol-1, nRow, nTab, DIR_LEFT, 
nExtend /*out*/ );
+            if (eSum >= ScAutoSumSum )
+                break;
             --nStartCol;
         }
         rRangeList.push_back( ScRange( nStartCol, nRow, nTab, nEndCol, nRow, 
nTab ) );
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to