Frama-C-discuss mailing list archives
This page gathers the archives of the old Frama-C-discuss archives, that was hosted by Inria's gforge before its demise at the end of 2020. To search for mails newer than September 2020, please visit the page of the new mailing list on Renater.
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Frama-c-discuss] Uninitialized variables
- Subject: [Frama-c-discuss] Uninitialized variables
- From: pascal.cuoq at gmail.com (Pascal Cuoq)
- Date: Wed, 11 Apr 2012 11:02:05 +0200
- In-reply-to: <4F853964.8000001@nus.edu.sg>
- References: <4F853964.8000001@nus.edu.sg>
> main() { > ?int a,x; > ?if(a > 0) x=a+1; > ?else x=a+2; > > ?return x; > } The above program invokes undefined behavior as per C99's J.2 clause: > The value of an object with automatic storage duration is used while it is > indeterminate (6.2.4, 6.7.8, 6.8). To be very clear at the risk of boring people who already know this stuff, ?undefined behavior? means that you cannot expect variable a to have some value. Both branches in your program could be executed, or the program could reformat your harddrive. Plus, if you get into the habit of using uninitialized variables as a shortcut for ?anything? in your analyses, you are at risk of someone eventually poking (gentle) fun at you in a blog post: http://blog.frama-c.com/index.php?post/2011/11/25/Static-analysis-tools-comparisons But if you want to take that risk, go ahead and treat uninitialized variables as unknown values. I never tire of writing these blog posts. > Now it's able to compute values for a and x as [--..--] (I guess it > represents infinite range). You don't need to guess. This is documented on page 26 of: http://frama-c.com/download/frama-c-value-analysis.pdf > is it possible to tweak Frama-C so that it can > automatically assign infinite range for uninitialized variables (such as the > eg above)? With the attached patch, that should apply without too much difficulty to the Nitrogen release, the program above gives the result: [value] Values at end of function main: x ? [--..--] Pascal Index: src/value/eval_funs.ml =================================================================== --- src/value/eval_funs.ml (revision 17768) +++ src/value/eval_funs.ml (working copy) @@ -376,9 +376,12 @@ let with_locals = List.fold_left (fun acc local -> - Cvalue.Model.add_binding_not_initialized + Cvalue.Model.add_binding + ~with_alarms:CilE.warn_none_mode + ~exact:true acc - (Locations.loc_of_varinfo local)) + (Locations.loc_of_varinfo local) + Cvalue.V.top_int) with_formals f.slocals in
- Follow-Ups:
- [Frama-c-discuss] Uninitialized variables
- From: m.vijay at nus.edu.sg (Vijayaraghavan Murali)
- [Frama-c-discuss] Uninitialized variables
- References:
- [Frama-c-discuss] Uninitialized variables
- From: m.vijay at nus.edu.sg (Vijayaraghavan Murali)
- [Frama-c-discuss] Uninitialized variables
- Prev by Date: [Frama-c-discuss] Uninitialized variables
- Next by Date: [Frama-c-discuss] Uninitialized variables
- Previous by thread: [Frama-c-discuss] Uninitialized variables
- Next by thread: [Frama-c-discuss] Uninitialized variables
- Index(es):