#define GMX_FATALERROR_GMXASSERT_H
#include <boost/current_function.hpp>
+#include <boost/exception/detail/attribute_noreturn.hpp>
/*! \addtopublicapi
* \{
*
* \ingroup module_fatalerror
*/
+BOOST_ATTRIBUTE_NORETURN
void assertHandler(const char *condition, const char *msg,
const char *func, const char *file, int line);
{
gmx::Options options(NULL, NULL);
std::vector<std::string> values;
- MockOptionStorage *mock;
+ MockOptionStorage *mock = NULL;
ASSERT_NO_THROW(options.addOption(
MockOption("name").storageObject(&mock).required()
.storeVector(&values)));
-
+ ASSERT_TRUE(mock != NULL);
{
::testing::InSequence dummy;
using ::testing::DoAll;
{
gmx::Options options(NULL, NULL);
std::vector<std::string> values;
- MockOptionStorage *mock;
+ MockOptionStorage *mock=NULL;
ASSERT_NO_THROW(options.addOption(
MockOption("name").storageObject(&mock)
.storeVector(&values).multiValue()));
-
+ ASSERT_TRUE(mock != NULL);
{
::testing::InSequence dummy;
using ::testing::DoAll;
{
gmx::Options options(NULL, NULL);
std::vector<std::string> values;
- MockOptionStorage *mock;
+ MockOptionStorage *mock=NULL;
ASSERT_NO_THROW(options.addOption(
MockOption("name").storageObject(&mock)
.storeVector(&values).valueCount(2)));
-
+ ASSERT_TRUE(mock != NULL);
{
::testing::InSequence dummy;
using ::testing::DoAll;
static void
init_item_evaloutput(t_selelem *sel)
{
+ GMX_ASSERT(!(sel->child == NULL &&
+ (sel->type == SEL_SUBEXPRREF || sel->type == SEL_SUBEXPR)),
+ "Subexpression elements should always have a child element");
+
/* Process children. */
if (sel->type != SEL_SUBEXPRREF)
{
&& ((sel->cdata->flags & SEL_CDATA_SIMPLESUBEXPR)
|| (sel->cdata->flags & SEL_CDATA_FULLEVAL)))
{
+ GMX_ASSERT(sel->child,
+ "Subexpression elements should always have a child element");
sel->cdata->gmin = sel->child->cdata->gmin;
sel->cdata->gmax = sel->child->cdata->gmax;
}
case SEL_EXPRESSION:
case SEL_MODIFIER:
+ GMX_ASSERT(g, "group cannot be null");
_gmx_sel_evaluate_method_params(data, sel, g);
init_method(sel, data->top, g->isize);
if (!(sel->flags & SEL_DYNAMIC))
}
else if (sel->u.cgrp.isize == 0)
{
+ GMX_ASSERT(g, "group cannot be null");
gmx_ana_index_reserve(&sel->u.cgrp, g->isize);
sel->cdata->evaluate(data, sel, g);
if (bDoMinMax)
static void
postprocess_item_subexpressions(t_selelem *sel)
{
+ GMX_ASSERT(!(sel->child == NULL &&
+ (sel->type == SEL_SUBEXPRREF || sel->type == SEL_SUBEXPR)),
+ "Subexpression elements should always have a child element");
+
/* Process children. */
if (sel->type != SEL_SUBEXPRREF)
{
sel->u.cgrp.name = name;
sel->evaluate = &_gmx_sel_evaluate_subexpr_staticeval;
- if (sel->cdata)
- {
- sel->cdata->evaluate = sel->evaluate;
- }
+ sel->cdata->evaluate = sel->evaluate;
+
_gmx_selelem_free_values(sel->child);
sel->child->mempool = NULL;
_gmx_selvalue_setstore(&sel->child->v, sel->v.u.ptr);
_gmx_sel_evaluate_arithmetic(gmx_sel_evaluate_t *data, t_selelem *sel,
gmx_ana_index_t *g)
{
- t_selelem *left, *right;
int n, i, i1, i2;
real lval, rval=0., val=0.;
- left = sel->child;
- right = left->next;
+ t_selelem *const left = sel->child;
+ t_selelem *const right = left->next;
SelelemTemporaryValueAssigner assigner;
MempoolSelelemReserver reserver;
n = (sel->flags & SEL_SINGLEVAL) ? 1 : g->isize;
sel->v.nr = n;
+
+ bool bArithNeg = (sel->u.arith.type == ARITH_NEG);
+ GMX_ASSERT(right || bArithNeg,
+ "Right operand cannot be null except for negations");
for (i = i1 = i2 = 0; i < n; ++i)
{
lval = left->v.u.r[i1];
- if (sel->u.arith.type != ARITH_NEG)
+ if (!bArithNeg)
{
rval = right->v.u.r[i2];
}
{
++i1;
}
- if (sel->u.arith.type != ARITH_NEG && !(right->flags & SEL_SINGLEVAL))
+ if (!bArithNeg && !(right->flags & SEL_SINGLEVAL))
{
++i2;
}
* children have been updated. */
if (sel->type == SEL_ROOT)
{
+ GMX_ASSERT(sel->child, "Root elements should always have a child");
sel->flags |= (sel->child->flags & SEL_VALTYPEMASK);
}
/* Mark that the flags are set */
memcpy(dest->x, src->x, dest->nr*sizeof(*dest->x));
if (dest->v)
{
+ GMX_ASSERT(src->v, "src velocities should be non-null if dest velocities are allocated");
memcpy(dest->v, src->v, dest->nr*sizeof(*dest->v));
}
if (dest->f)
{
+ GMX_ASSERT(src->f, "src forces should be non-null if dest forces are allocated");
memcpy(dest->f, src->f, dest->nr*sizeof(*dest->f));
}
gmx_ana_indexmap_copy(&dest->m, &src->m, bFirst);
if (nparams > 0 && !param)
{
report_error(fp, name, "error: missing parameter data");
- bOk = false;
return false;
}
if (nparams == 0 && param)
++argv;
gmx::TrajectoryAnalysisCommandLineRunner runner(mod.get());
+#ifndef __clang_analyzer__ //Clang BUG: 11722
bPrintCopyrightOnError = false;
+#endif
return runner.run(argc, argv);
}
catch (const std::exception &ex)