sc/source/core/opencl/formulagroupcl.cxx | 7 +++++++ sc/source/core/opencl/opbase.cxx | 3 +++ sc/source/core/opencl/opbase.hxx | 19 +++++++++++++++++++ 3 files changed, 29 insertions(+)
New commits: commit 4678d37fdc64145b10f997668fd2890ddb3c8462 Author: Luboš Luňák <l.lu...@collabora.com> AuthorDate: Fri Nov 16 16:47:59 2018 +0100 Commit: Luboš Luňák <l.lu...@collabora.com> CommitDate: Tue Dec 4 16:05:39 2018 +0100 add a macro for detecting incorrect number of parameters in opencl Change-Id: Id8253537025cc373c1ff183c0059158489e11750 Reviewed-on: https://gerrit.libreoffice.org/64239 Tested-by: Jenkins Reviewed-by: Luboš Luňák <l.lu...@collabora.com> (cherry picked from commit 433b1fdd3fc588cb542bb834117752dbef4e8236) Reviewed-on: https://gerrit.libreoffice.org/64469 diff --git a/sc/source/core/opencl/formulagroupcl.cxx b/sc/source/core/opencl/formulagroupcl.cxx index 7df68fc77fab..e18eeb9932d0 100644 --- a/sc/source/core/opencl/formulagroupcl.cxx +++ b/sc/source/core/opencl/formulagroupcl.cxx @@ -3640,6 +3640,13 @@ DynamicKernel* DynamicKernel::create( const ScCalcConfig& rConfig, const ScToken delete pDynamicKernel; return nullptr; } + catch (const InvalidParameterCount& ipc) + { + SAL_INFO("sc.opencl", "Dynamic formula compiler: InvalidParameterCount " << ipc.mParameterCount + << " at " << ipc.mFile << ":" << ipc.mLineNumber); + delete pDynamicKernel; + return nullptr; + } catch (const OpenCLError& oce) { // I think OpenCLError exceptions are actually exceptional (unexpected), so do use SAL_WARN diff --git a/sc/source/core/opencl/opbase.cxx b/sc/source/core/opencl/opbase.cxx index e4ba2a0a6d93..2d026475a088 100644 --- a/sc/source/core/opencl/opbase.cxx +++ b/sc/source/core/opencl/opbase.cxx @@ -34,6 +34,9 @@ OpenCLError::OpenCLError( const std::string& function, cl_int error, const std:: Unhandled::Unhandled( const std::string& fn, int ln ) : mFile(fn), mLineNumber(ln) {} +InvalidParameterCount::InvalidParameterCount( int parameterCount, const std::string& file, int ln ) : + mParameterCount(parameterCount), mFile(file), mLineNumber(ln) {} + DynamicKernelArgument::DynamicKernelArgument( const ScCalcConfig& config, const std::string& s, const FormulaTreeNodeRef& ft ) : mCalcConfig(config), mSymName(s), mFormulaTree(ft) { } diff --git a/sc/source/core/opencl/opbase.hxx b/sc/source/core/opencl/opbase.hxx index 5833796726a1..8fef4d3e1d09 100644 --- a/sc/source/core/opencl/opbase.hxx +++ b/sc/source/core/opencl/opbase.hxx @@ -60,6 +60,25 @@ public: int const mLineNumber; }; +class InvalidParameterCount +{ +public: + InvalidParameterCount( int parameterCount, const std::string& file, int ln ); + + int mParameterCount; + std::string mFile; + int const mLineNumber; +}; + +// Helper macro to be used in code emitting OpenCL code for Calc functions. +// Requires the vSubArguments parameter. +#define CHECK_PARAMETER_COUNT(min, max) \ + do { \ + const int count = vSubArguments.size(); \ + if( count < ( min ) || count > ( max )) \ + throw InvalidParameterCount( count, __FILE__, __LINE__ ); \ + } while( false ) + typedef std::shared_ptr<FormulaTreeNode> FormulaTreeNodeRef; class FormulaTreeNode _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits