rest of the params as uninitialized. */
if (idx >= arg_svals->length ())
break;
+ tree parm_lval = iter_parm;
+ if (tree parm_default_ssa = ssa_default_def (fun, iter_parm))
+ parm_lval = parm_default_ssa;
+ const region *parm_reg = get_lvalue (parm_lval, ctxt);
const svalue *arg_sval = (*arg_svals)[idx];
- const region *parm_reg = get_lvalue (iter_parm, ctxt);
set_value (parm_reg, arg_sval, ctxt);
-
- /* Also do it for default SSA name (sharing the same value). */
- tree parm_default_ssa = ssa_default_def (fun, iter_parm);
- if (parm_default_ssa)
- {
- const region *defssa_reg = get_lvalue (parm_default_ssa, ctxt);
- set_value (defssa_reg, arg_sval, ctxt);
- }
}
}
else
for (tree iter_parm = DECL_ARGUMENTS (fndecl); iter_parm;
iter_parm = DECL_CHAIN (iter_parm))
{
- on_top_level_param (iter_parm, ctxt);
- tree parm_default_ssa = ssa_default_def (fun, iter_parm);
- if (parm_default_ssa)
+ if (tree parm_default_ssa = ssa_default_def (fun, iter_parm))
on_top_level_param (parm_default_ssa, ctxt);
+ else
+ on_top_level_param (iter_parm, ctxt);
}
}
/* Example of a multilevel wrapper around malloc/free, with a double-'free'. */
-/* { dg-additional-options "-fdiagnostics-show-line-numbers -fdiagnostics-path-format=inline-events -fanalyzer-checker=malloc -fanalyzer-verbose-state-changes -fdiagnostics-show-caret" } */
+/* { dg-additional-options "-fdiagnostics-show-line-numbers -fdiagnostics-path-format=inline-events -fanalyzer-checker=malloc -fdiagnostics-show-caret" } */
/* { dg-enable-nn-line-numbers "" } */
#include <stdlib.h>
| NN | return malloc (size);
| | ~~~~~~~~~~~~~
| | |
- | | (6) allocated here (state of '<unknown>': 'start' -> 'unchecked', NULL origin)
+ | | (6) allocated here
|
<------+
|
| NN | if (!result)
| | ~
| | |
- | | (8) assuming 'result' is non-NULL (state of 'result': 'unchecked' -> 'nonnull', NULL origin)
+ | | (8) assuming 'result' is non-NULL
| | (9) following 'false' branch (when 'result' is non-NULL)...
| NN | abort ();
| NN | result->i = i;
| NN | free (ptr);
| | ~~~~~~~~~~
| | |
- | | (16) first 'free' here (state of 'ptr': 'nonnull' -> 'freed', NULL origin)
+ | | (16) first 'free' here
|
<------+
|
| NN | free (ptr);
| | ~~~~~~~~~~
| | |
- | | (23) second 'free' here; first 'free' was at (16) ('ptr' is in state 'freed')
+ | | (23) second 'free' here; first 'free' was at (16)
|
{ dg-end-multiline-output "" } */