Building a specialized static analyzer

Size: px
Start display at page:

Download "Building a specialized static analyzer"

Transcription

1 Building a specialized static analyzer The Astrée experience Antoine Miné CNRS, École Normale Supérieure Security and Reliability of Software Systems 12 December 2008 Antoine Miné Building a specialized static analyzer p. 1 / 112

2 Introduction Analyse Statique Temps RÉEl check statically for the absence of run-time errors (RTE) on synchronous reactive codes, in a subset of C fast ( 50 KLoc/h), precise (aims at 0 alarms) and sound Development team CNRS / ENS (B. Blanchet), P. Cousot, R. Cousot, L. Mauborgne, (D. Monniaux), J. Feret, A. Miné, X. Rival Antoine Miné Building a specialized static analyzer p. 2 / 112

3 The Astrée analyzer academic tool, with industrial applications in mind lines of OCaml Time-line Nov Astrée project starts Nov primary control software of the Airbus A340 analyzed proof of the absence of RTE Jan start working on Airbus A380 (while A380 development in progress) Apr maiden flight of the A380 proof of the absence of RTE (for current version) Sep study on applicability to space software Antoine Miné Building a specialized static analyzer p. 3 / 112

4 Overview Introduction Static analysis First analyses Language and semantics Design of Astrée Architecture Iterator Abstract domains Results Antoine Miné Building a specialized static analyzer p. 4 / 112

5 Introduction Introduction Antoine Miné Building a specialized static analyzer p. 5 / 112

6 Introduction Existing verification methods Static analysis Testing well-established method but no formal warranty, high cost Antoine Miné Building a specialized static analyzer p. 6 / 112

7 Introduction Existing verification methods Static analysis Testing well-established method but no formal warranty, high cost Formal methods: Theorem proving proof essentially manual, but checked automatically powerful, but very steep learning curve Model checking check a model of the program (usually user-specified, finite) automatic and complete (wrt. model), but costly Antoine Miné Building a specialized static analyzer p. 6 / 112

8 Introduction Static analysis Existing verification methods (cont.) (Semantic-based) static analysis works directly on the source code automatic, always terminating sound incomplete (full control and data coverage) (false alarms) (not a model) parameterized by one/several abstraction(s) mostly used to check simple properties, with low precision requirements (e.g., for optimisation) Antoine Miné Building a specialized static analyzer p. 7 / 112

9 Introduction Static analysis Existing verification methods (cont.) (Semantic-based) static analysis works directly on the source code automatic, always terminating sound incomplete (full control and data coverage) (false alarms) (not a model) parameterized by one/several abstraction(s) mostly used to check simple properties, with low precision requirements (e.g., for optimisation) Specialized static analyzer checks for run-time errors (overflow, etc.) is very precise at least on a chosen class of programs (no false alarm) gives sound results on all programs Antoine Miné Building a specialized static analyzer p. 7 / 112

10 Abstract interpretation Introduction Static analysis Abstract Interpretation General theory of semantic approximations [Cousot Cousot 77,91] D (e.g. P(Z n )) Concrete domain γ D (e.g. n-dim boxes) Abstract domain Elements in D represent properties of interest (semantical) are computer-representable (algorithmic) Choosing D is a trade-off between cost and expressiveness Antoine Miné Building a specialized static analyzer p. 8 / 112

11 Introduction Abstract interpretation (cont.) Static analysis For each concrete semantic operator F : D n D: assignment, test, control-flow join, etc. define F : D n D that can be implemented (algorithm) is sound: F (γ(x 1 ),..., γ(x n)) γ(f (X 1,..., X n)) various precision / cost trade-offs = computable over-approximation Antoine Miné Building a specialized static analyzer p. 9 / 112

12 Introduction Construction by refinement Static analysis Approach define a concrete semantics build a simple and fast analyzer (intervals) refine the analyzer until 0 false alarm: determine which necessary properties are missed add / refine an abstract domain to infer it Benefits sound by construction efficient (adapted cost / precision trade-off) encourages modular, reusable abstractions Antoine Miné Building a specialized static analyzer p. 10 / 112

13 Introduction Analysis input and output First analyses C sources (preprocessed) (environment configuration) Astrée alarms invariants Antoine Miné Building a specialized static analyzer p. 11 / 112

14 Example analysis Introduction First analyses loop.c 1 void main() { 2 unsigned i; 3 for (i=10; i>=0; i--) { 4 /* */ 5 } 6 } Starting the analysis % astree loop.c --exec-fn main egrep WARN Antoine Miné Building a specialized static analyzer p. 13 / 112

15 Example analysis Introduction First analyses loop.c 1 void main() { 2 unsigned i; 3 for (i=10; i>=0; i--) { 4 /* */ 5 } 6 } Analysis result % astree loop.c --exec-fn main egrep WARN loop.c: ::[call#main@1:loop@4>=4:]: WARN: unsigned int arithmetic range [-1, ] not included in [0, ] % Antoine Miné Building a specialized static analyzer p. 13 / 112

16 Introduction Example analysis (corrected) First analyses loop2.c 1 void main() { 2 unsigned i; 3 for (i=10; i> 0; i--) { 4 /* */ 5 } 6 } Analysis result % astree loop2.c --exec-fn main egrep WARN % Antoine Miné Building a specialized static analyzer p. 14 / 112

17 False alarm example Introduction First analyses false-alarm.c 1 void main() { 2 int x, y; 3 if ((-4681 < y) && (y < 4681) && (x < 32767) && 4 ( < x) && ((7*y*y-1) == x*x)) 5 y = 1 / x; 6 } Antoine Miné Building a specialized static analyzer p. 16 / 112

18 False alarm example Introduction First analyses false-alarm.c 1 void main() { 2 int x, y; 3 if ((-4681 < y) && (y < 4681) && (x < 32767) && 4 ( < x) && ((7*y*y-1) == x*x)) 5 y = 1 / x; 6 } Analysis result % astree false-alarm.c --exec-fn main egrep WARN false-alarm.c:5.8-13::[call#main@1:]: WARN: integer division by zero [-32766, 32766] % Antoine Miné Building a specialized static analyzer p. 16 / 112

19 False alarm example Introduction First analyses false-alarm.c 1 void main() { 2 int x, y; 3 if ((-4681 < y) && (y < 4681) && (x < 32767) && 4 ( < x) && ((7*y*y-1) == x*x)) 5 y = 1 / x; 6 } Actually, 7y 2 1 = x 2 has no integer solution in [ 32766; 32766] [ 4680; 4680] = the alarm is spurious Astrée is not knowledgeable of Diophantine equations (difficult theory, Matiyasevich s Theorem) Antoine Miné Building a specialized static analyzer p. 16 / 112

20 Introduction Reachability information First analyses accum.c 1 void main() { 2 float x = 1.; 3 while (1) x = 0.9*x + 2.; 5 } Analysis result % astree accum.c --exec-fn main --dump-invariants... loop@3>=4: x in [ , ]... Astrée shows an over-approximation of the range of x (a loop invariant valid starting at the fourth iteration) Antoine Miné Building a specialized static analyzer p. 17 / 112

21 Class of analyzed codes Introduction Language and semantics synchronous reactive codes compiled to C from a graphical language a la Scade / Simulink avionics codes Structure initialize state variables while ( clock ) { read input from sensors (volatile) compute output and new state write output to actuators wait for clock tick } Antoine Miné Building a specialized static analyzer p. 18 / 112

22 Example Introduction Language and semantics each box is a built-in C function boxes have state variables (static) input (volatile) are bounded by physical constraints Antoine Miné Building a specialized static analyzer p. 19 / 112

23 Impact on the analysis Introduction Language and semantics Difficult side unstructured code large code (50K 1M loc) floating-point computation many variables (10K ) some complex (non-linear) numerical invariants Easy side homogeneous code simple algorithms no recursion simple data-structures no dynamic allocation Antoine Miné Building a specialized static analyzer p. 20 / 112

24 C subset Introduction Language and semantics Handled machine integers, enum IEEE floats structures, arrays bitfields pointers, aliases pointer arithmetic unions tests (if) loops (for, while) break, return, forward goto switch Unhandled dynamic allocation recursivity backward goto longjmp libraries (libc, etc.) stubs needed concurrency (threads) Antoine Miné Building a specialized static analyzer p. 21 / 112

25 Considered semantics Introduction Language and semantics Definition of the semantics C99 norm IEEE norm (portable programs) (floating-point arithmetics) platform-dependent choices: range of types bit-representation (sizeof, endianess, struct padding, etc.) compiler- and linker-dependent choices: automatic variable initialization (optional) symbol redefinition (forbidden) Some choices are configurable through command-line options Antoine Miné Building a specialized static analyzer p. 22 / 112

26 Run-time errors Introduction Language and semantics Kinds of run-time errors overflows in float, integer, enum arithmetic and cast division, modulo by 0 on integers and floats invalid right argument of bit-shift out-of-bound array access invalid pointer arithmetic or dereference violation of user-specified assertions ( ASTREE_assert) Antoine Miné Building a specialized static analyzer p. 23 / 112

27 Run-time errors (cont.) Introduction Language and semantics Several semantics are possible after an error: halt the program division, modulo by zero floating-point overflow assertion failure return all possible values in the type range invalid bit-shift well-defined result modulo on integer arithmetics overflow unpredictable behavior invalid dereference (Astrée treats this as halting the program) Some alarm reporting and semantics is configurable through command-line options Antoine Miné Building a specialized static analyzer p. 24 / 112

28 Introduction Semantic configuration example Language and semantics enum.c 1 enum { FALSE=0, TRUE=1 } B; 2 void main() { 3 ASTREE_log_vars((B;interv)); 4 B = B+1; 5 ASTREE_log_vars((B;interv)); 6 } Default semantic parameters % astree enum.c --exec-fn main egrep "WARN B in" enum.c:3.2-31: log: B in {0} enum.c:5.2-31: log: B in {1} % Antoine Miné Building a specialized static analyzer p. 25 / 112

29 Introduction Language and semantics Semantic configuration example (cont.) No zero-initialization of globals % astree enum.c --exec-fn main --no-global-initialization egrep "WARN B in" enum.c:3.2-31: log: B in [ , ] enum.c:4.6-9::[call#main@2:]: WARN: signed int arithmetic range [ , ] not included in [ , ] enum.c:4.2-9::[call#main@2:]: WARN: signed int->unnamed enum conversion range [ , ] not included in {0,1} enum.c:5.2-31: log: B in [ , ] % Antoine Miné Building a specialized static analyzer p. 26 / 112

30 Introduction Language and semantics Semantic configuration example (cont.) Enum clamping % astree enum.c --exec-fn main --no-global-initialization --clamp-enum egrep "WARN B in" enum.c:3.2-31: log: B in [ , ] enum.c:4.6-9::[call#main@2:]: WARN: signed int arithmetic range [ , ] not included in [ , ] enum.c:4.2-9::[call#main@2:]: WARN: signed int->unnamed enum conversion range [ , ] not included in {0,1} enum.c:5.2-31: log: B in [0,1] % Antoine Miné Building a specialized static analyzer p. 27 / 112

31 Design of Astrée Architecture of Astrée Architecture of Astrée Antoine Miné Building a specialized static analyzer p. 28 / 112

32 Global view Design of Astrée Architecture of Astrée preprocessor (cpp) C99 parser source-level linker intermediate code generation and typing constant propagation and code simplification global dependency analysis abstract interpreter Antoine Miné Building a specialized static analyzer p. 29 / 112

33 Abstract interpreter Design of Astrée Architecture of Astrée iterator trace partitioning memory model and alias analysis (reduced product of) numerical abstract domains. intervals octagons decision trees... intervals Antoine Miné Building a specialized static analyzer p. 30 / 112

34 Design of Astrée Iterator Iterator Antoine Miné Building a specialized static analyzer p. 31 / 112

35 Design of Astrée Syntax-directed interpreter Iterator Astrée works as an interpreter: start from a main function follow the control-flow of the program the current state X D is an abstraction of an environment set in D P(Var Val) = collecting semantics, compute reachable states low memory cost: one environment per loop and if level The interpretation is by induction on the syntax Atomic instructions: assignments V expr : D D update environments tests expr == 0? : D D filter environments add / remove variables Antoine Miné Building a specialized static analyzer p. 32 / 112

36 Design of Astrée Iterator Syntax-directed interpreter (cont.) Instruction blocks: sequential evaluation i 1 ;... ; i n = i n i 1 Conditionals: if (expr) i T else i F evaluate both branches, then join: if (X ) = i T ( expr! = 0? (X )) i F ( expr == 0? (X )) where γ(x Y ) γ(x ) γ(y ) Function calls: inline all function calls = high precision (full stack context sensitivity) costly, no recursivity Antoine Miné Building a specialized static analyzer p. 33 / 112

37 Design of Astrée Analysis of conditionals example Iterator cond.c 1 void main() { 2 int b; 3 float x; ASTREE_log_vars((x;interv)); 4 if (b) { x = 0; ASTREE_log_vars((x;interv)); } 5 else { x = 10; ASTREE_log_vars((x;interv)); } 6 ASTREE_log_vars((x;interv)); 7 } Analysis result % astree cond.c --exec-fn main egrep "up x in" cond.c: : log: x in [ e+38, e+38] cond.c: : log: x in {0.} cond.c: : log: x in {10.} cond.c:6.2-31: log: x in [0., 10.] % Antoine Miné Building a specialized static analyzer p. 34 / 112

38 Design of Astrée Iterator Context-sensitive analysis example fun.c 1 int f(int b) { return 1/b; } 2 3 void main() { 4 f(2); 5 f(0); 6 f(0); 7 } Analysis result % astree fun.c --exec-fn main egrep WARN fun.c: ::[call#main@3:call#f@5:]: WARN: integer division by zero {0} % Antoine Miné Building a specialized static analyzer p. 35 / 112

39 Design of Astrée Function stub example Iterator nostub.c Analysis result 1 extern double acos(double d); 2 void main() { 3 double x; 4 double y = acos(x); 5 ASTREE_log_vars((x,y;interv)); 6 } % astree nostub.c --exec-fn main egrep "WARN in " nostub.c: : WARN: stub log called x in [ e+308, e+308] y in [ e+308, e+308] % Antoine Miné Building a specialized static analyzer p. 36 / 112

40 Design of Astrée Iterator Function stub example (corrected) stub.c Analysis result 1 double acos(double d) { 2 double r; 3 ASTREE_assert((d>=-1 && d<=1)); 4 ASTREE_known_fact((r>=0 && r<=3.2)); 5 return r; 6 } % astree nostub.c stub.c --exec-fn main egrep "WARN in " stub.c: ::[call#main@2:call#acos@4:]: WARN: assert failure x in [-1., 1.] y in [0., ] % Antoine Miné Building a specialized static analyzer p. 37 / 112

41 Loop analysis Design of Astrée Iterator Loops: while (expr) i Concrete semantics: fixpoint while (X ) = expr == 0? (lfp Y X ( i expr! = 0? )(Y )) Abstract semantics: iterations with widening while (X ) = expr == 0? (X n) where X 0 = X (start) X i+1 = X i ( i expr! = 0? )(X i ) (up iteration) X n+1 = Xn (fix-point) is an extrapolation operator γ(x ) γ(y ) γ(x Y ) enforces termination (e.g., start with, enlarge unstable bounds to threshold, then max-type) Antoine Miné Building a specialized static analyzer p. 38 / 112

42 Loop analysis example Design of Astrée Iterator fltloop.c 1 void main() { 2 float x = 0.1; 3 while (1) { 4 int r; 5 if (r) x = 0.2; else x = 0.9*x + 0.1; 6 ASTREE_log_vars((x;interv)); 7 } 8 } Analysis result % astree fltloop.c --exec-fn main --unroll 0 egrep "up x in" x in [ , ]... Antoine Miné Building a specialized static analyzer p. 40 / 112

43 Loop analysis example Design of Astrée Iterator fltloop.c 1 void main() { 2 float x = 0.1; 3 while (1) { 4 int r; 5 if (r) x = 0.2; else x = 0.9*x + 0.1; 6 ASTREE_log_vars((x;interv)); 7 } 8 } Analysis result fltloop.c: :up iteration #0 x in [ , ] fltloop.c: :up iteration #1 x in [ , ]... Antoine Miné Building a specialized static analyzer p. 40 / 112

44 Loop analysis example Design of Astrée Iterator fltloop.c 1 void main() { 2 float x = 0.1; 3 while (1) { 4 int r; 5 if (r) x = 0.2; else x = 0.9*x + 0.1; 6 ASTREE_log_vars((x;interv)); 7 } 8 } Analysis result fltloop.c: :up iteration #2 x in [ , ] fltloop.c: :up iteration #3 x in [ , ]... Antoine Miné Building a specialized static analyzer p. 40 / 112

45 Loop analysis example Design of Astrée Iterator fltloop.c 1 void main() { 2 float x = 0.1; 3 while (1) { 4 int r; 5 if (r) x = 0.2; else x = 0.9*x + 0.1; 6 ASTREE_log_vars((x;interv)); 7 } 8 } Analysis result fltloop.c: :up iteration #4 x in [ , ] fltloop.c: :up iteration #5 x in [ , ] % Antoine Miné Building a specialized static analyzer p. 40 / 112

46 Design of Astrée Improved loop analysis Iterator Actually, Astrée performs more complex iterations: unrolls the first iterations (separate analysis of initialization) performs increasing iterations with widening performs decreasing iterations after stabilisation (improves the fixpoint) alarms are printed in a final checking iteration Loop analysis can be configured by command-line options Antoine Miné Building a specialized static analyzer p. 41 / 112

47 Design of Astrée Loop unrolling example Iterator initloop.c 1 void main() { 2 int I = 1, x; 3 while (1) { 4 ASTREE_log_vars((I, x; interv)); 5 if (I) { x = 0; I = 0; } 6 else { x++; if (x > 100) x = 0; } 7 } 8 } Antoine Miné Building a specialized static analyzer p. 43 / 112

48 Design of Astrée Loop unrolling example Iterator initloop.c 1 void main() { 2 int I = 1, x; 3 while (1) { 4 ASTREE_log_vars((I, x; interv)); 5 if (I) { x = 0; I = 0; } 6 else { x++; if (x > 100) x = 0; } 7 } 8 } Analysis result without unrolling % astree initloop.c --exec-fn main --unroll 0 egrep "iteration in WARN" I in {1}, x in [ , ]... Antoine Miné Building a specialized static analyzer p. 43 / 112

49 Design of Astrée Loop unrolling example Iterator initloop.c 1 void main() { 2 int I = 1, x; 3 while (1) { 4 ASTREE_log_vars((I, x; interv)); 5 if (I) { x = 0; I = 0; } 6 else { x++; if (x > 100) x = 0; } 7 } 8 } Analysis result without unrolling initloop.c: :up iteration #0 I in [0, 1], x in [ , ] initloop.c: :up iteration #1 I in [0, 1], x in [ , ]... Antoine Miné Building a specialized static analyzer p. 43 / 112

50 Design of Astrée Loop unrolling example Iterator initloop.c 1 void main() { 2 int I = 1, x; 3 while (1) { 4 ASTREE_log_vars((I, x; interv)); 5 if (I) { x = 0; I = 0; } 6 else { x++; if (x > 100) x = 0; } 7 } 8 } Analysis result without unrolling initloop.c: :down iteration #0 I in [0, 1], x in [ , ] initloop.c: ::[call#main@1:]: WARN: signed int arithmetic range [ , ] not included in [ , ] % Antoine Miné Building a specialized static analyzer p. 43 / 112

51 Design of Astrée Loop unrolling example Iterator initloop.c 1 void main() { 2 int I = 1, x; 3 while (1) { 4 ASTREE_log_vars((I, x; interv)); 5 if (I) { x = 0; I = 0; } 6 else { x++; if (x > 100) x = 0; } 7 } 8 } Antoine Miné Building a specialized static analyzer p. 43 / 112

52 Design of Astrée Loop unrolling example Iterator initloop.c 1 void main() { 2 int I = 1, x; 3 while (1) { 4 ASTREE_log_vars((I, x; interv)); 5 if (I) { x = 0; I = 0; } 6 else { x++; if (x > 100) x = 0; } 7 } 8 } Analysis result with unrolling % astree initloop.c --exec-fn main --unroll 1 egrep "iteration in WARN" -B 1 loop@3=1: I in {1}, x in [ , ]... Antoine Miné Building a specialized static analyzer p. 43 / 112

53 Design of Astrée Loop unrolling example Iterator initloop.c 1 void main() { 2 int I = 1, x; 3 while (1) { 4 ASTREE_log_vars((I, x; interv)); 5 if (I) { x = 0; I = 0; } 6 else { x++; if (x > 100) x = 0; } 7 } 8 } Analysis result with unrolling loop@3>=2: I in {0}, x in {0} initloop.c: :up iteration #0 loop@3>=2: I in {0}, x in [0, 1] initloop.c: :up iteration #1... Antoine Miné Building a specialized static analyzer p. 43 / 112

54 Design of Astrée Loop unrolling example Iterator initloop.c 1 void main() { 2 int I = 1, x; 3 while (1) { 4 ASTREE_log_vars((I, x; interv)); 5 if (I) { x = 0; I = 0; } 6 else { x++; if (x > 100) x = 0; } 7 } 8 } Analysis result with unrolling loop@3>=2: I in {0}, x in [0, 2] initloop.c: :up iteration #2... loop@3>=2: I in {0}, x in [0, 19] initloop.c: :up iteration #9... Antoine Miné Building a specialized static analyzer p. 43 / 112

55 Design of Astrée Loop unrolling example Iterator initloop.c 1 void main() { 2 int I = 1, x; 3 while (1) { 4 ASTREE_log_vars((I, x; interv)); 5 if (I) { x = 0; I = 0; } 6 else { x++; if (x > 100) x = 0; } 7 } 8 } Analysis result with unrolling loop@3>=2: I in {0}, x in [0, 41] initloop.c: :up iteration #10 loop@3>=2: I in {0}, x in [0, 32767] initloop.c: :up iteration #11... Antoine Miné Building a specialized static analyzer p. 43 / 112

56 Design of Astrée Loop unrolling example Iterator initloop.c 1 void main() { 2 int I = 1, x; 3 while (1) { 4 ASTREE_log_vars((I, x; interv)); 5 if (I) { x = 0; I = 0; } 6 else { x++; if (x > 100) x = 0; } 7 } 8 } Analysis result with unrolling loop@3>=2: I in {0}, x in [0, 32767] initloop.c: :down iteration #0 loop@3>=2: I in {0}, x in [0, 100] initloop.c: :down iteration #1 loop@3>=2: I in {0}, x in [0, 100] % Antoine Miné Building a specialized static analyzer p. 43 / 112

57 Nested loops Design of Astrée Iterator nested.c 1 void main() { 2 int i,j,x[10][20]; 3 for (i=0;i<10;i++) 4 for (j=0;j<20;j++) { 5 x[i][j] = 1; 6 ASTREE_log_vars((i,j;interv)); 7 } 8 } Analysis result % astree nested.c --exec-fn main --unroll 0 egrep "i in WARN" i in {0}, j in {0} i in {0}, j in [0, 1]... i in {0}, j in [0, 19] Antoine Miné Building a specialized static analyzer p. 45 / 112

58 Nested loops Design of Astrée Iterator nested.c 1 void main() { 2 int i,j,x[10][20]; 3 for (i=0;i<10;i++) 4 for (j=0;j<20;j++) { 5 x[i][j] = 1; 6 ASTREE_log_vars((i,j;interv)); 7 } 8 } Analysis result i in [0, 1], j in {0} i in [0, 1], j in [0, 1]... i in [0, 9], j in [0, 18] i in [0, 9], j in [0, 19] % Antoine Miné Building a specialized static analyzer p. 45 / 112

59 Design of Astrée Numerical domains Numerical domains Antoine Miné Building a specialized static analyzer p. 46 / 112

60 Design of Astrée Integer interval domain Numerical domains Integer interval definition D = Var (Z { }) (Z {+ }) maps variables to interval bounds { } Benefits can express the absence of (most) RTE (overflow, out-of-bound access) easy to implement (e.g. assignments by induction on the syntax of expressions [a; b] + [c; d] = [a + c; b + d]) low memory and time cost (linear?) Antoine Miné Building a specialized static analyzer p. 47 / 112

61 Data-structures Design of Astrée Numerical domains Naïve idea: arrays fetch, update in O(1) copy in O( Var ) (tests and loops) in O( Var ) = cost of one iteration: O( Var P ) O( P 2 ) Antoine Miné Building a specialized static analyzer p. 48 / 112

62 Data-structures Design of Astrée Numerical domains Naïve idea: arrays fetch, update in O(1) copy in O( Var ) (tests and loops) in O( Var ) = cost of one iteration: O( Var P ) O( P 2 ) Better idea: functional maps (balanced binary trees) fetch, update in O(log Var ) copy in O(1) in O( P i log Var ) (for i th block) = cost of one iteration: O( P log Var ) O( P log P ) Antoine Miné Building a specialized static analyzer p. 48 / 112

63 Float interval domain Design of Astrée Numerical domains Concrete semantics: IEEE norm compute over a finite set F Q two-step evaluation evaluate exactly in Q round the result in F, in direction r {0, +,, n} x r y = R r ( x + y ) R + (x) = min {z F z x} possibility of run-time errors: overflow and division by zero (semantics halts with a RTE instead of constructing ± or NaN) Abstract semantics: intervals with float bounds in F round upper bounds towards +, lower bounds towards [a, b] [c, d] = [a c, b + d] [min F, max F] Antoine Miné Building a specialized static analyzer p. 49 / 112

64 Range of X: in rationals: X in floats (concrete semantics): X abstract float semantics with widening: X min { t T t } Antoine Miné at most T iterations Building a specialized static analyzer p. 50 / 112 Interval widening Design of Astrée Numerical domains Widening with threshold, parameterized by a finite set T : [ ; [ b] { [ ; d] = ] b if b d ; min{ t T {+ } t d } otherwise Example X=0; while (1) { if (?) X=[0;10]; X=0.1*X+[0;75]; /* X [0; ] */ }

65 Design of Astrée Choice of widening thresholds Numerical domains On floats the precise bound is generally useless for RTE-detection computations can be stable if the bound is overshot ( attractive fixpoint) = use a sufficiently dense exponential ramp On integers The exact bound is important for array bound checking Solutions: some bounds can be discovered by decreasing iterations static thresholds (e.g., array size) dynamic thresholds: enrich T X when encountering if (X c) Antoine Miné Building a specialized static analyzer p. 51 / 112

66 Design of Astrée Interval widening delay Numerical domains delay.c Analysis result 1 void main() { 2 int X=0, Y=0; 3 while (1) { 4 ASTREE_log_vars((X,Y;interv)); 5 if (X<100) X++; 6 if (X>=60+Y) Y=20; 7 } 8 } % astree delay.c --exec-fn main egrep "up WARN X in" up iter #0: X in [3, 4], Y in {0} up iter #1: X in [3, 5], Y in {0} up iter #2: X in [3, 6], Y in {0} up iter #3: X in [3, 17], Y in {0} Antoine Miné Building a specialized static analyzer p. 53 / 112

67 Design of Astrée Interval widening delay Numerical domains delay.c Analysis result 1 void main() { 2 int X=0, Y=0; 3 while (1) { 4 ASTREE_log_vars((X,Y;interv)); 5 if (X<100) X++; 6 if (X>=60+Y) Y=20; 7 } 8 }... up iter #8: X in [3, 43], Y in {0} up iter #9: X in [3, 99], Y in {0} up iter #10: X in [3, 100], Y in [0, 20] % Antoine Miné Building a specialized static analyzer p. 53 / 112

68 Design of Astrée Interval widening delay Numerical domains delay.c 1 void main() { 2 int X=0, Y=0; 3 while (1) { 4 ASTREE_log_vars((X,Y;interv)); 5 if (X<100) X++; 6 if (X>=60+Y) Y=20; 7 } 8 } may be replaced with to increase precision: use a per-variable, per-domain freshness counter incremented when unstable, unchanged when stable only for certain counter values and always after some value Antoine Miné Building a specialized static analyzer p. 53 / 112

69 Design of Astrée Other non-relational domains Numerical domains D Var D b Congruences D b = {az + b} useful to: check (multi-dimensional) array traversal check pointer alignment constraints Bit-fields D b = [0; 31] P({0, 1}) useful to abstract bit-operations precisely &,, <<, >> also generate congruence information Antoine Miné Building a specialized static analyzer p. 54 / 112

70 Design of Astrée Congruence analysis example Numerical domains cong.c 1 void main() { 2 int i,x[100]; 3 for (i=1;i<=100;i+=2) { 4 ASTREE_log_vars((i;inter,cong)); 5 x[i] = 1; 6 } 7 } Analysis result % astree cong.c --exec-fn main egrep "i in WARN" i in {1} i in {7} i in [7, 9] (2Z+1)... i in [7, 99] (2Z+1) % Antoine Miné Building a specialized static analyzer p. 55 / 112

71 Octagon domain Design of Astrée Numerical domains Definition D = X,Y Var constraints ± X ± Y c Antoine Miné Building a specialized static analyzer p. 56 / 112

72 Octagon domain Design of Astrée Numerical domains Algorithms generalize DBMs (X Y c) representation: square matrix of constraints constraint-propagation: based on shortest-path closure exact abstraction for X ±Y + c, ±X ± Y c Cost memory: O( Var 2 ) time O( Var 3 ) (full matrices) (closure) Antoine Miné Building a specialized static analyzer p. 57 / 112

73 Design of Astrée The need for relational domains Numerical domains rel.c 1 void main() { 2 int I, V=0; 3 for (I=10;I>=0;I--) { 4 int B; 5 if (B) V=V+1; 6 } 7 ASTREE_log_vars((V)); 8 } Analysis result with standard domains % astree rel.c --exec-fn main egrep "WARN V in" V in [0, 11] % Antoine Miné Building a specialized static analyzer p. 59 / 112

74 Design of Astrée The need for relational domains Numerical domains rel.c 1 void main() { 2 int I, V=0; 3 for (I=10;I>=0;I--) { 4 int B; 5 if (B) V=V+1; 6 } 7 ASTREE_log_vars((V)); 8 } Analysis result without relational domains % astree rel.c --exec-fn main --no-relational egrep "WARN V in" rel.c: ::[call#main@1:loop@4>=4:]: WARN: signed int arithmetic range [ , ] not included in [ , ] V in [ , ] % Antoine Miné Building a specialized static analyzer p. 59 / 112

75 Design of Astrée The need for relational domains Numerical domains rel.c 1 void main() { 2 int I, V=0; 3 for (I=10;I>=0;I--) { 4 int B; 5 if (B) V=V+1; 6 } 7 ASTREE_log_vars((V)); 8 } V is not stable in the loop, and not bounded by any test To bound V we must: infer the loop invariant V + I 10 combine it with I = 1 at loop exit Antoine Miné Building a specialized static analyzer p. 59 / 112

76 Design of Astrée The need for relational domains Numerical domains rel.c 1 void main() { 2 int I, V=0; 3 for (I=10;I>=0;I--) { 4 int B; 5 if (B) V=V+1; 6 } 7 ASTREE_log_vars((V)); 8 } Octagon invariant % astree rel.c --exec-fn main egrep "V <=" 0 <= V <= 11, I = -1, -12 <= I-V <= -1, -1 <= I+V <= 10 % Antoine Miné Building a specialized static analyzer p. 59 / 112

77 Design of Astrée The need for relational domains Numerical domains rel.c 1 void main() { 2 int I, V=0; 3 for (I=10;I>=0;I--) { 4 int B; 5 if (B) V=V+1; 6 } 7 ASTREE_log_vars((V)); 8 } The need for relational domains Even when looking for a non-relational invariant at loop exit a relational loop invariant is often needed Antoine Miné Building a specialized static analyzer p. 59 / 112

78 Rate limiter example Design of Astrée Numerical domains rlim.c 1 float x,d,r,s,y; 2 ASTREE_volatile_input((x [-128,128])); 3 ASTREE_volatile_input((d [0,16])); 4 void main() { 5 while (1) { 6 float X=x,D=d; 7 S=Y; R=X-S; Y=X; 8 if (R<=-D) Y=S-D; else if (R>=D) Y=S+D; 9 ASTREE_log_vars((Y)); 10 } 11 } Y is bounded by max(128, S ) because either: Y = X [ 128, 128] Y = S D S and X S D, so Y = S D X 128 Y = S + D S and X S D, so Y = S + D X 128 Y [ 128, 128] Antoine Miné Building a specialized static analyzer p. 60 / 112

79 Design of Astrée Numerical domains Rate limiter example (interval analysis) Analysis without octagons % astree rlim.c --exec-fn main --no-octagon egrep "iter WARN Y in" unroll: Y in [-128., 128.] unroll: Y in [-144., 144.]... up iter #0: Y in [-192., 192.] up iter #1: Y in [-208., 208.] up iter #2: Y in [-224., 224.] up iter #3: Y in [-1016., 1016.]... up iter #18: Y in [ e+38, e+38] rlim.c: ::[call#main@4:loop@5>=4:]: WARN: float arithmetic range [-inf., +inf.] not included in [ e+38, e+38] Y = S D = min Y = min Y max D Y = S + D = max Y = max Y min D after control-flow join: Y = (S + [ 16, 16]) [ 128, 128] Antoine Miné Building a specialized static analyzer p. 61 / 112

80 Design of Astrée Numerical domains Rate limiter example (octagon analysis) Analysis result with octagons % astree rlim.c --exec-fn main egrep "iter WARN Y in" unroll: Y in [ , ] Y in [ , ]... up iter #0: Y in [ , ] up iter #1: Y in [ , ] up iter #2: Y in [ , ] up iter #3: Y in [-1000., 1000.] we have an approximate octagon abstraction for V [a 0, b 0 ] + [a i, b i ]V i = Y = S D 16 Y S 0 Y = S + D 0 Y S 16 any Y M with M 144 can be proved to be a loop invariant = iterations stop at the first widening threshold 144 Antoine Miné Building a specialized static analyzer p. 62 / 112

81 Octagon packing Design of Astrée Numerical domains Cost in O( Var n ) with n > 1 is too expensive! Antoine Miné Building a specialized static analyzer p. 63 / 112

82 Octagon packing Design of Astrée Numerical domains Cost in O( Var n ) with n > 1 is too expensive! Solution Do not put all Var is a single large octagon, but make many very small packs: local dependency pre-analysis link only variables manipulated together cut dependencies at syntactic block boundaries Result: on the kind of code we analyze linear number of packs in Var, P constant size of packs Antoine Miné Building a specialized static analyzer p. 63 / 112

83 Design of Astrée Octagon packing statistics Numerical domains # lines # variables # packs size size 2 3 size Antoine Miné Building a specialized static analyzer p. 64 / 112

84 Design of Astrée Manual octagon packing Numerical domains octpack.c 1 int X=10, Y=100; 2 void f() { Y--; } 3 void main() { 4 while (X >= 0) { 5 X--; f(); 6 } 7 } Analysis result with automatic packing % astree octpack.c --exec-fn main --print-packs egrep "WARN (X Y)" octpack.c: ::[call#main@3:loop@4>=4:call#f@5:]: WARN: signed int arithmetic range [ , ] not included in [ , ] % Antoine Miné Building a specialized static analyzer p. 65 / 112

85 Design of Astrée Manual octagon packing Numerical domains octpack2.c 1 int X=10, Y=100; 2 void f() { Y--; } 3 void main() { 4 ASTREE_octagon_pack((X,Y)); 5 while (X >= 0) { 6 X--; f(); 7 } 8 } Analysis result with manual packing % astree octpack2.c --exec-fn main --print-packs egrep "WARN (X Y)" octpack2.c@4@1 X Y % Antoine Miné Building a specialized static analyzer p. 66 / 112

86 Linearization Design of Astrée Numerical domains Issue Relational domains are generally bad at non-linear expressions (multiplications, logical, bit-wise operations, etc.) Antoine Miné Building a specialized static analyzer p. 67 / 112

87 Linearization Design of Astrée Numerical domains Issue Relational domains are generally bad at non-linear expressions (multiplications, logical, bit-wise operations, etc.) Solution Linearize expressions: put into the form [a 0 ; b 0 ] + i [a i; b i ]V i linear = easy to manipulate intervals = express non-determinism a powerful way to abstract Antoine Miné Building a specialized static analyzer p. 67 / 112

88 Linearization (cont.) Design of Astrée Numerical domains Linearization l: defined by induction on the syntax of expressions where l(e 1 + e 2 ) = l(e 1 ) + l(e 2 ) l(e 1 e 2 ) = l(e 1 ) l(e 2 ) { either i(e1 ) l(e l(e 1 e 2 ) = 2 ) or i(e 2 ) l(e 1 ) l(e 1 /e 2 ) = l(e 1 )/i(e 2 ) otherwise l(e) = i(e) +, are extended to linear expressions, / are extended to an expression and an interval i(e) evaluates e using interval arithmetics For, we need a strategy to choose between two linearizations (e.g. minimize the interval factor) Antoine Miné Building a specialized static analyzer p. 68 / 112

89 Using linearization Design of Astrée Numerical domains Application: octagons can handle interval linear expressions e.g.: if Y [0; 1], Z 0, then l(y Z) = [0; 1] Z X Y Z is abstracted as X [0; 1] Z = octagons can infer that X Z linearization provides symbolic simplification for free e.g.: l(2x X ) = (X ) if X [0; 1] plain intervals evaluate 2X X to [ 1; 2] after linearization, we have [0; 1] Linearization is an abstraction it can also lose precision Antoine Miné Building a specialized static analyzer p. 69 / 112

90 Design of Astrée Symbolic constant propagation Numerical domains Example 1 Y=[-100;100]; 2 X=Y+10; 3 if (X<0) X=-X; 4 if (X<60) { Y } How can we find a bound on Y... without octagons? Antoine Miné Building a specialized static analyzer p. 70 / 112

91 Design of Astrée Symbolic constant propagation Numerical domains Example 1 Y=[-100;100]; 2 X=Y+10; 3 if (X<0) X=-X; 4 if (X<60) { Y } How can we find a bound on Y... without octagons? Alternate solution Remember that X = Y + 10 and substitute X with Y + 10 at line 3 and on The interval domain will find Y [ 70; 50] Antoine Miné Building a specialized static analyzer p. 70 / 112

92 Design of Astrée Symbolic constant propagation Numerical domains Comparison with a relational domain Benefits linear cost ( vanilla constant propagation) Issues simple to implement interacts well with linearization (more opportunities for simplification) no inference of non-syntactic properties (joins, loops) not optimal, or even monotonic scheme substitution strategies are fragile (wrt. code transformations) Antoine Miné Building a specialized static analyzer p. 71 / 112

93 Design of Astrée Numerical domains Floating-point semantics and symbolic computations Problem Most algebraic rules valid in Z or Q are no longer valid in floating-point How can we: perform sound floating-point linearization? use relational domains on floating-point expressions? Antoine Miné Building a specialized static analyzer p. 72 / 112

94 Design of Astrée Numerical domains Floating-point simplification example (float) float-c.c 1 void main() { 2 float a = 1.0; 3 float x = ; 4 float y = (x + a); 5 float z = (x - a); 6 float r1 = y - z; 7 float r2 = 2*a; 8 assert(r1==a2); 9 } Concrete execution (rounding to nearest) y = z = r1 = 0 r2 = 2 a.out: float-c.c:15: main: Assertion r1==r2 failed. Antoine Miné Building a specialized static analyzer p. 73 / 112

95 Design of Astrée Numerical domains Floating-point simplification example (float) float-a.c 1 void main() { 2 float a = 1.0; 3 float x = ; 4 float y = (x + a); 5 float z = (x - a); 6 float r1 = y - z; 7 float r2 = 2*a; 8 ASTREE_log_vars((y,z,r1,r2;interv)); 9 ASTREE_assert((r1==r2)); 10 } Analysis (all roundings) % astree float-a.c --exec-fn main egrep " in WARN" y in [ e+15, e+15] z in [ e+15, e+15] r1 in [ , ] r2 in {2.} float-a.c: ::[call#main@1:]: WARN: assert failure %Antoine Miné Building a specialized static analyzer p. 74 / 112

96 Design of Astrée Numerical domains Floating-point simplification example (double) double-c.c 1 void main() { 2 double a = 1.0; 3 double x = ; 4 double y = (x + a); 5 double z = (x - a); 6 double r1 = y - z; 7 double r2 = 2*a; 8 assert(r1==r2); 9 } Concrete execution (rounding to nearest) y = z = r1 = 2 r2 = 2 Antoine Miné Building a specialized static analyzer p. 75 / 112

97 Design of Astrée Numerical domains Floating-point simplification example (double) double-a.c 1 void main() { 2 double a = 1.0; 3 double x = ; 4 double y = (x + a); 5 double z = (x - a); 6 double r1 = y - z; 7 double r2 = 2*a; 8 ASTREE_log_vars((y,z,r1,r2;inter)); 9 ASTREE_assert((r1==r2)); 10 } Analysis (all roundings) % astree double-a.c --exec-fn main egrep " in WARN" y in { e+15} z in { e+15} r1 in {2.} r2 in {2.} % Antoine Miné Building a specialized static analyzer p. 76 / 112

98 Design of Astrée Numerical domains Floating-point simplification example (mixed) fltdbl-c.c 1 void main() { 2 float a = 1.0; 3 double x = ; 4 float y = (x + a); 5 float z = (x - a); 6 float r1 = y - z; 7 float r2 = 2*a; 8 assert(r1==a2); 9 } Concrete execution (rounding to nearest) y = z = r1 = r2 = 2 a.out: fltdbl-c.c:15: main: Assertion r1==r2 failed. Antoine Miné Building a specialized static analyzer p. 77 / 112

99 Design of Astrée Numerical domains Floating-point simplification example (mixed) fltdbl-a.c 1 void main() { 2 float a = 1.0; 3 double x = ; 4 float y = (x + a); 5 float z = (x - a); 6 float r1 = y - z; 7 float r2 = 2*a; 8 ASTREE_log_vars((y,z,r1,r2;interv)); 9 ASTREE_assert((r1==r2)); 10 } Analysis (all roundings) % astree fltdbl-a.c --exec-fn main egrep " in WARN" y in [ e+15, e+15] z in [ e+15, e+15] r1 in [ , ] r2 in {2.} fltdbl-a.c: ::[call#main@1:]: WARN: assert failure %Antoine Miné Building a specialized static analyzer p. 78 / 112

100 Design of Astrée Floating-point relational domains Numerical domains Solution keep reasoning in rationals: D still abstracts P(Var Q) translate float expressions into real expressions, making rounding errors explicit we use linearization, abstracting rounding using non-deterministic intervals Example On 32-bit single precision floats: relative error of magnitude 2 23 absolute error of magnitude (normalized) (denormalized) Z X (0.25 X ) is linearized into: Z [0.749 ; ] X [ 1; 1] Antoine Miné Building a specialized static analyzer p. 79 / 112

101 Design of Astrée Floating-point relational domains Numerical domains We can implement fully in float: round upper bounds towards +, lower bounds towards huge time gain (small) precision loss (wrt. exact rationals) Tower of abstractions deterministic IEEE semantics interval linear form domain-specific abstractions float implementation of Antoine Miné Building a specialized static analyzer p. 80 / 112

102 Numerical filters Design of Astrée Numerical domains d order filter I n : input at time n O n : output at time n O n = αo n 1 + βo n 2 + ai n + bi n 1 + ci n 2 60 y x Ellipsoid domain D X,Y Var (Y 2 ayx bx 2 c) discovers the variables X, Y Var discovers stable values a, b, c R 100 Antoine Miné Building a specialized static analyzer p. 81 / 112

103 Design of Astrée Numerical filter example Numerical domains filter.c 1 int INIT = 1; 2 float P, X, E1,E2, S1,S2, INPUT; 3 ASTREE_volatile_input((INPUT [-10,10])); 4 5 void filtre2 () { 6 if (INIT) P = S1 = E1 = X; 7 else P = ( * X) - 8 (E1 * ) + (E2 * ) + 9 (S1 * ) - (S2 * ); 10 E2 = E1; E1 = X; S2 = S1; S1 = P; 11 } void main () { 14 while (1) { 15 X = INPUT; filtre2(); INIT = INPUT; 16 } 17 } Antoine Miné Building a specialized static analyzer p. 82 / 112

104 Design of Astrée Numerical filter example analysis Numerical domains Analysis with filter domain % astree filter.c --exec-fn main --dump-invariants egrep "WARN P in" P in [ , ] % Analysis without filter domain % astree filter.c --exec-fn main --no-filters --dump-invariants egrep "WARN P in" filter.c: ::[call#main@13:loop@14>=4:call#filtre2@15:]: WARN: double->float conversion range [-inf., +inf.] not included in [ e+38, e+38] P in [ e+38, e+38] % Antoine Miné Building a specialized static analyzer p. 83 / 112

105 Design of Astrée Synchronous hypothesis Numerical domains Synchronous programs the program has an implicit clock the clock ticks for a (configurable) maximal count clock-ok.c 1 int X, B; 2 ASTREE_volatile_input((B)); 3 ASTREE_max_clock((3600)); 4 void main() { 5 while (1) { 6 if (B) X+=2; else X=0; 7 ASTREE_wait_for_clock(()); 8 } 9 } Antoine Miné Building a specialized static analyzer p. 84 / 112

106 Clock relationship Design of Astrée Numerical domains Analysis with clock domain % astree clock-ok.c --exec-fn main --dump-invariants egrep "WARN X in \ X\ " X in [0, 7202] X <= 0. + clock *2. <= % clock is an implicit variable incremented at clock tick The clock domain infers relations of the form: V αclock + β with a linear cost which in turns gives bounds for V Antoine Miné Building a specialized static analyzer p. 85 / 112

107 Design of Astrée Arithmetic-geometric progressions arigeo-bad.c Numerical domains 1 void main() { 2 float X; 3 ASTREE_known_fact((X>=0 && X <=100.)); 4 while (1) { 5 X=X/101.; 6 X=X*101.; 7 } 8 } Analysis result % astree arigeo-bad.c --exec-fn main --dump-invariants egrep "WARN X in" arigeo-bad.c:6.4-12::[call#main@1:loop@4>=4:]: WARN: double->float conversion range [0., +inf.] not included in [ e+38, e+38] X in [0., e+38] % Antoine Miné Building a specialized static analyzer p. 87 / 112

108 Design of Astrée Arithmetic-geometric progressions arigeo-bad.c Numerical domains 1 void main() { 2 float X; 3 ASTREE_known_fact((X>=0 && X <=100.)); 4 while (1) { 5 X=X/101.; 6 X=X*101.; 7 } 8 } In float, X / X due to rounding-errors = X is enlarged at each iteration step Antoine Miné Building a specialized static analyzer p. 87 / 112

109 Design of Astrée Numerical domains Arithmetic-geometric progressions (corrected) arigeo-ok.c 1 void main() { 2 float X; 3 ASTREE_known_fact((X>=0 && X <=100.)); 4 while (1) { 5 X=X/101.; 6 X=X*101.; 7 ASTREE_wait_for_clock(()); 8 } 9 } Analysis result % astree arigeo-ok.c --exec-fn main --dump-invariants egrep "WARN X in \X\" X in [0., ] X <= ( e-37/( ))* ( )^clock e-37/( ) <= % Antoine Miné Building a specialized static analyzer p. 89 / 112

110 Design of Astrée Numerical domains Arithmetic-geometric progressions (corrected) arigeo-ok.c 1 void main() { 2 float X; 3 ASTREE_known_fact((X>=0 && X <=100.)); 4 while (1) { 5 X=X/101.; 6 X=X*101.; 7 ASTREE_wait_for_clock(()); 8 } 9 } The arithmetic-geometric deviation domain infers constraints: V α(1 + a) clock + β which can provide bounds for V Antoine Miné Building a specialized static analyzer p. 89 / 112

111 Reduced product Design of Astrée Numerical domains Formalization domain product D = D 1 D 2 γ 1 2 (x 1, x 2 ) = γ 1 (x 1 ) γ 2 (x 2 ) compute independently 1 and 2, and reduce ρ : D D γ i (ρ(x) i ) γ i (x i ) et γ 1 2 (ρ(x)) = γ 1 2 (x) Applications interval congruence reduction [1; 7] 2Z = [2; 6] 2Z interval octagon partial reduction Antoine Miné Building a specialized static analyzer p. 90 / 112

112 Design of Astrée Widening and reduced product Numerical domains In D 1 D 2 : X i+1 = X i 1 2 F (X i ) converges X i+1 = ρ(x i 1 2 F (X i )) may not converge Solutions do not reduce successive iterates ( precision loss) define a new widening for the product D 1 D 2 ( more work to do, and an extra proof of convergence) Antoine Miné Building a specialized static analyzer p. 91 / 112

113 Design of Astrée Communications between domains Numerical domains Abstract domain modules communicate invariants through channels Principe 1 can use an information X 2 computed by D 2 X 2 not necessarily representable in D 1 less systematic than the reduced product D 1 D 2 Application: numerical filtering domain Intervals used as pivot information: input: filter initialization from an interval (not found by the filter domain) output: interval bounding the filter output (usable by other domains) Antoine Miné Building a specialized static analyzer p. 92 / 112

114 Design of Astrée Partitioning domains Partitioning domains Antoine Miné Building a specialized static analyzer p. 93 / 112

115 Boolean decision trees Design of Astrée Partitioning domains Issue In our programs, control-flow is often encoded in booleans Example B = (X > 0);.. long code. if (B) Y = 1/X ; (B = 1 X > 0) (B = 0 X 0) not convex We need to partition wrt. the value of B Antoine Miné Building a specialized static analyzer p. 94 / 112

116 Boolean decision trees Design of Astrée Partitioning domains B 1 B B 2 BDD X X 1 Y Y X X Y Y Domaines numériques abstraits booleans in nodes numerical domains at leaves (intervals, octagons) opportunistic sharing (e.g. B=?), not maximal packing, using local dependency pre-analysis Antoine Miné Building a specialized static analyzer p. 95 / 112

117 Design of Astrée Trace partitioning: test partitioning Partitioning domains Idea A program transformation to improve the analysis precision Example if (...) i=0; else i=1; X=a[i]+b[i]; = if (...) { i=0; X=a[i]+b[i]; } else { i=1; X=a[i]+b[i]; } Unlike boolean partitioning: control, not data criterion Antoine Miné Building a specialized static analyzer p. 96 / 112

118 Design of Astrée Partitioning domains Trace partitioning: loop partitioning We can also partition finite loops Before transformation for (i = 0;i < 10 && x X [i];i++); y = A[i] + B[i](x X [i]); After transformation if (x > X [0]) y = A[0] + B[0](x X [0]); else if (x > X [1]) y = A[1] + B[1](x X [1]);. else y = A[10] + B[10](x X [10]); The control after the loop exit is partitioning wrt. the number of loop iterations Antoine Miné Building a specialized static analyzer p. 97 / 112

119 Design of Astrée Formalizing trace partitioning Partitioning domains We do not actually use a program transformation Semantical formalization control points L concrete trace semantics: D t = (L (Var Z)) abstraction: D t (L ) D abstract control points L : L = {if l = true, if l = false, loop l = i, loop l i l L} Intuition: program states are enriched with an (abstract) history of the control flow A local dependency pre-analysis is used to determine the abstract points (L ) of interest (cost / precision trade-off) Antoine Miné Building a specialized static analyzer p. 98 / 112

120 Design of Astrée Memory domain Memory domain Antoine Miné Building a specialized static analyzer p. 99 / 112

121 Basic memory model Design of Astrée Memory domain Memory abstraction: in extension Abstracted as P(Var T ), Var fixed: one cell per scalar variable recursively split arrays and structures we can also smash big arrays on a single summary cell Made possible as there is no dynamic memory allocation and the stack is fully known Pointers Concrete pointer = base Var + offset Z abstracted separately: base abstracted as a set Var offset abstracted using a synthetic integer variable Antoine Miné Building a specialized static analyzer p. 100 / 112

122 Design of Astrée Pointer analysis example Memory domain ptr.c 1 struct { int a; int b; } s; 2 void main() { 3 int b, *p = (int*)&s; 4 if (b) p++; 5 *p = 12; 6 ASTREE_log_vars((p,s;inter,cong,ptr)); 7 } Analysis result % astree ptr.c --exec-fn main egrep "WARN in =" base(p) = { s } off(p) in [0, 4] (4Z) s.b in [0, 12] (12Z) s.a in [0, 12] (12Z) % Antoine Miné Building a specialized static analyzer p. 101 / 112

Relational Abstract Domains for the Detection of Floating-Point Run-Time Errors

Relational Abstract Domains for the Detection of Floating-Point Run-Time Errors ESOP 2004 Relational Abstract Domains for the Detection of Floating-Point Run-Time Errors Antoine Miné École Normale Supérieure Paris FRANCE This work was partially supported by the ASTRÉE RNTL project

More information

Static Analysis by A. I. of Embedded Critical Software

Static Analysis by A. I. of Embedded Critical Software Static Analysis by Abstract Interpretation of Embedded Critical Software Julien Bertrane ENS, Julien.bertrane@ens.fr Patrick Cousot ENS & CIMS, Patrick.Cousot@ens.fr Radhia Cousot CNRS & ENS, Radhia.Cousot@ens.fr

More information

The Apron Library. Bertrand Jeannet and Antoine Miné. CAV 09 conference 02/07/2009 INRIA, CNRS/ENS

The Apron Library. Bertrand Jeannet and Antoine Miné. CAV 09 conference 02/07/2009 INRIA, CNRS/ENS The Apron Library Bertrand Jeannet and Antoine Miné INRIA, CNRS/ENS CAV 09 conference 02/07/2009 Context : Static Analysis What is it about? Discover properties of a program statically and automatically.

More information

Widening Operator. Fixpoint Approximation with Widening. A widening operator 2 L ˆ L 7``! L is such that: Correctness: - 8x; y 2 L : (y) v (x y)

Widening Operator. Fixpoint Approximation with Widening. A widening operator 2 L ˆ L 7``! L is such that: Correctness: - 8x; y 2 L : (y) v (x y) EXPERIENCE AN INTRODUCTION WITH THE DESIGN TOF A SPECIAL PURPOSE STATIC ANALYZER ABSTRACT INTERPRETATION P. Cousot Patrick.Cousot@ens.fr http://www.di.ens.fr/~cousot Biarritz IFIP-WG 2.3 2.4 meeting (1)

More information

Script started on Mon Oct 15 08:21: demo-astree/programs %./README

Script started on Mon Oct 15 08:21: demo-astree/programs %./README Script started on Mon Oct 15 08:21:18 2007 demo-astree/programs./readme ****************************************************** ****************************************************** *** *** *** Demonstration

More information

Why does ASTRÉE scale up?

Why does ASTRÉE scale up? Form Methods Syst Des (2009) 35: 229 264 DOI 10.1007/s10703-009-0089-6 Why does ASTRÉE scale up? Patrick Cousot Radhia Cousot Jérôme Feret Laurent Mauborgne Antoine Miné Xavier Rival Published online:

More information

Static Analysis and Verification of Aerospace Software

Static Analysis and Verification of Aerospace Software Static Analysis and Verification of Aerospace Software by Abstract Interpretation joint work with: Patrick Cousot Julien Bertrane and Radhia Cousot École normale supérieure, Paris Patrick Cousot, Courant

More information

Script started on Thu Oct 11 07:52: demo-astree/programs %./README

Script started on Thu Oct 11 07:52: demo-astree/programs %./README Script started on Thu Oct 11 07:52:30 2007 demo-astree/programs./readme ****************************************************** ****************************************************** *** *** *** Demonstration

More information

Verasco: a Formally Verified C Static Analyzer

Verasco: a Formally Verified C Static Analyzer Verasco: a Formally Verified C Static Analyzer Jacques-Henri Jourdan Joint work with: Vincent Laporte, Sandrine Blazy, Xavier Leroy, David Pichardie,... June 13, 2017, Montpellier GdR GPL thesis prize

More information

State of Practice. Automatic Verification of Embedded Control Software with ASTRÉE and beyond

State of Practice. Automatic Verification of Embedded Control Software with ASTRÉE and beyond Automatic Verification of Embedded Control Software with ASTRÉE and beyond Patrick Cousot Jerome C. Hunsaker Visiting Professor Department of Aeronautics and Astronautics, MIT cousot mit edu www.mit.edu/~cousot

More information

A Static Analyzer for Large Safety-Critical Software

A Static Analyzer for Large Safety-Critical Software A Static Analyzer for Large Safety-Critical Software (Extended Abstract) Bruno Blanchet Patrick Cousot Radhia Cousot Jérôme Feret Laurent Mauborgne Antoine Miné David Monniaux Xavier Rival ABSTRACT We

More information

Algebraic Program Analysis

Algebraic Program Analysis Introduction to Algebraic Program Analysis Zachary Kincaid 1 Thomas Reps 2,3 1 Princeton University 2 University of Wisconsin-Madison 3 GrammaTech, Inc. January 8, 2018 1 Program analysis Design algorithms

More information

The ASTRÉE Analyzer Patrick Cousot 2, Radhia Cousot 1,3, Jerôme Feret 2, Laurent Mauborgne 2, Antoine Miné 2, David Monniaux 1,2, and Xavier Rival 2 1 CNRS 2 École Normale Supérieure, Paris, France Firstname.Lastname@ens.fr

More information

The Apron Library. Antoine Miné. CEA Seminar December the 10th, CNRS, École normale supérieure

The Apron Library. Antoine Miné. CEA Seminar December the 10th, CNRS, École normale supérieure Antoine Miné CNRS, École normale supérieure CEA Seminar December the 10th, 2007 CEA December the 10th, 2007 Antoine Miné p. 1 / 64 Outline Introduction Introduction Main goals Theoretical background The

More information

InterprocStack analyzer for recursive programs with finite-type and numerical variables

InterprocStack analyzer for recursive programs with finite-type and numerical variables InterprocStack analyzer for recursive programs with finite-type and numerical variables Bertrand Jeannet Contents 1 Invoking InterprocStack 1 2 The Simple language 2 2.1 Syntax and informal semantics.........................

More information

Hierarchical Shape Abstraction of Dynamic Structures in Static Blocks

Hierarchical Shape Abstraction of Dynamic Structures in Static Blocks Hierarchical Shape Abstraction of Dynamic Structures in Static Blocks Pascal Sotin and Xavier Rival INRIA 4 novembre 2013 P. Sotin, X. Rival (INRIA) Hierarchical Shape Abstraction 4 novembre 2013 1 / 29

More information

Structuring an Abstract Interpreter through Value and State Abstractions: EVA, an Evolved Value Analysis for Frama C

Structuring an Abstract Interpreter through Value and State Abstractions: EVA, an Evolved Value Analysis for Frama C Structuring an Abstract Interpreter through Value and State Abstractions: EVA, an Evolved Value Analysis for Frama C David Bühler CEA LIST, Software Safety Lab Frama-C & SPARK Day 2017 May 30th, 2017 David

More information

Sendmail crackaddr - Static Analysis strikes back

Sendmail crackaddr - Static Analysis strikes back Sendmail crackaddr - Static Analysis strikes back Bogdan Mihaila Technical University of Munich, Germany December 6, 2014 Name Lastname < name@mail.org > ()()()()()()()()()... ()()() 1 / 25 Abstract Interpretation

More information

Interval Polyhedra: An Abstract Domain to Infer Interval Linear Relationships

Interval Polyhedra: An Abstract Domain to Infer Interval Linear Relationships Interval Polyhedra: An Abstract Domain to Infer Interval Linear Relationships Liqian Chen 1,2 Antoine Miné 3,2 Ji Wang 1 Patrick Cousot 2,4 1 National Lab. for Parallel and Distributed Processing, Changsha,

More information

Bounded Model Checking Of C Programs: CBMC Tool Overview

Bounded Model Checking Of C Programs: CBMC Tool Overview Workshop on Formal Verification and Analysis Tools, CFDVS, IIT-Bombay - Feb 21,2017 Bounded Model Checking Of C Programs: CBMC Tool Overview Prateek Saxena CBMC Developed and Maintained by Dr Daniel Kröning

More information

Automatic Qualification of Abstract Interpretation-based Static Analysis Tools. Christian Ferdinand, Daniel Kästner AbsInt GmbH 2013

Automatic Qualification of Abstract Interpretation-based Static Analysis Tools. Christian Ferdinand, Daniel Kästner AbsInt GmbH 2013 Automatic Qualification of Abstract Interpretation-based Static Analysis Tools Christian Ferdinand, Daniel Kästner AbsInt GmbH 2013 2 Functional Safety Demonstration of functional correctness Well-defined

More information

Design and Implementation of a Special-Purpose Static Program Analyzer for Safety-Critical Real-Time Embedded Software

Design and Implementation of a Special-Purpose Static Program Analyzer for Safety-Critical Real-Time Embedded Software Design and Implementation of a Special-Purpose Static Program Analyzer for Safety-Critical Real-Time Embedded Software Bruno Blanchet 1, Patrick Cousot 1, Radhia Cousot 2, Jérôme Feret 1, Laurent Mauborgne

More information

Towards an industrial use of FLUCTUAT on safety-critical avionics software

Towards an industrial use of FLUCTUAT on safety-critical avionics software Towards an industrial use of FLUCTUAT on safety-critical avionics software David Delmas 1, Eric Goubault 2, Sylvie Putot 2, Jean Souyris 1, Karim Tekkal 3 and Franck Védrine 2 1. Airbus Operations S.A.S.,

More information

Fast Algorithms for Octagon Abstract Domain

Fast Algorithms for Octagon Abstract Domain Research Collection Master Thesis Fast Algorithms for Octagon Abstract Domain Author(s): Singh, Gagandeep Publication Date: 2014 Permanent Link: https://doi.org/10.3929/ethz-a-010154448 Rights / License:

More information

A Fast Review of C Essentials Part I

A Fast Review of C Essentials Part I A Fast Review of C Essentials Part I Structural Programming by Z. Cihan TAYSI Outline Program development C Essentials Functions Variables & constants Names Formatting Comments Preprocessor Data types

More information

Applications of Program analysis in Model-Based Design

Applications of Program analysis in Model-Based Design Applications of Program analysis in Model-Based Design Prahlad Sampath (Prahlad.Sampath@mathworks.com) 2018 by The MathWorks, Inc., MATLAB, Simulink, Stateflow, are registered trademarks of The MathWorks,

More information

Symbolic Methods to Enhance the Precision of Numerical Abstract Domains

Symbolic Methods to Enhance the Precision of Numerical Abstract Domains Symbolic Methods to Enhance the Precision of Numerical Abstract Domains Antoine Miné École Normale Supérieure, Paris, France, mine@di.ens.fr, http://www.di.ens.fr/ mine Abstract We present lightweight

More information

The Verification Grand Challenge and Abstract Interpretation

The Verification Grand Challenge and Abstract Interpretation The Verification Grand Challenge and Abstract Interpretation Patrick Cousot École normale supérieure, 45 rue d Ulm 75230 Paris cedex 05, France Patrick.Cousot ens fr Visiting the Aeronautics and Astronautics

More information

Iterative Program Analysis Abstract Interpretation

Iterative Program Analysis Abstract Interpretation Iterative Program Analysis Abstract Interpretation Summary by Ben Riva & Ofri Ziv Soundness Theorem Theorem: If a computation fixed-point is sound, then its least-fixed-point is sound. More precisely,

More information

COS 320. Compiling Techniques

COS 320. Compiling Techniques Topic 5: Types COS 320 Compiling Techniques Princeton University Spring 2016 Lennart Beringer 1 Types: potential benefits (I) 2 For programmers: help to eliminate common programming mistakes, particularly

More information

Principles of Program Analysis: A Sampler of Approaches

Principles of Program Analysis: A Sampler of Approaches Principles of Program Analysis: A Sampler of Approaches Transparencies based on Chapter 1 of the book: Flemming Nielson, Hanne Riis Nielson and Chris Hankin: Principles of Program Analysis Springer Verlag

More information

A Gentle Introduction to Program Analysis

A Gentle Introduction to Program Analysis A Gentle Introduction to Program Analysis Işıl Dillig University of Texas, Austin January 21, 2014 Programming Languages Mentoring Workshop 1 / 24 What is Program Analysis? Very broad topic, but generally

More information

Program verification. Generalities about software Verification Model Checking. September 20, 2016

Program verification. Generalities about software Verification Model Checking. September 20, 2016 Program verification Generalities about software Verification Model Checking Laure Gonnord David Monniaux September 20, 2016 1 / 43 The teaching staff Laure Gonnord, associate professor, LIP laboratory,

More information

Combining Static and Dynamic Contract Checking for Curry

Combining Static and Dynamic Contract Checking for Curry Michael Hanus (CAU Kiel) Combining Static and Dynamic Contract Checking for Curry LOPSTR 2017 1 Combining Static and Dynamic Contract Checking for Curry Michael Hanus University of Kiel Programming Languages

More information

Abstract Interpretation of Floating-Point. Computations. Interaction, CEA-LIST/X/CNRS. February 20, Presentation at the University of Verona

Abstract Interpretation of Floating-Point. Computations. Interaction, CEA-LIST/X/CNRS. February 20, Presentation at the University of Verona 1 Laboratory for ModElling and Analysis of Systems in Interaction, Laboratory for ModElling and Analysis of Systems in Interaction, Presentation at the University of Verona February 20, 2007 2 Outline

More information

Relational Abstract Domains for the Detection of Floating-Point Run-Time Errors

Relational Abstract Domains for the Detection of Floating-Point Run-Time Errors Relational Abstract Domains for the Detection of Floating-Point Run-Time Errors Antoine Miné To cite this version: Antoine Miné. Relational Abstract Domains for the Detection of Floating-Point Run-Time

More information

A Context-Sensitive Memory Model for Verification of C/C++ Programs

A Context-Sensitive Memory Model for Verification of C/C++ Programs A Context-Sensitive Memory Model for Verification of C/C++ Programs Arie Gurfinkel and Jorge A. Navas University of Waterloo and SRI International SAS 17, August 30th, 2017 Gurfinkel and Navas (UWaterloo/SRI)

More information

Static analysis of concurrent avionics software

Static analysis of concurrent avionics software Static analysis of concurrent avionics software with AstréeA Workshop on Static Analysis of Concurrent Software David Delmas Airbus 11 September 2016 Agenda 1 Industrial context Avionics software Formal

More information

Verification Overview Testing Theory and Principles Testing in Practice. Verification. Miaoqing Huang University of Arkansas 1 / 80

Verification Overview Testing Theory and Principles Testing in Practice. Verification. Miaoqing Huang University of Arkansas 1 / 80 1 / 80 Verification Miaoqing Huang University of Arkansas Outline 1 Verification Overview 2 Testing Theory and Principles Theoretical Foundations of Testing Empirical Testing Principles 3 Testing in Practice

More information

Formal Specification and Verification

Formal Specification and Verification Formal Specification and Verification Introduction to Promela Bernhard Beckert Based on a lecture by Wolfgang Ahrendt and Reiner Hähnle at Chalmers University, Göteborg Formal Specification and Verification:

More information

Deductive Methods, Bounded Model Checking

Deductive Methods, Bounded Model Checking Deductive Methods, Bounded Model Checking http://d3s.mff.cuni.cz Pavel Parízek CHARLES UNIVERSITY IN PRAGUE faculty of mathematics and physics Deductive methods Pavel Parízek Deductive Methods, Bounded

More information

Formal verification of a static analyzer based on abstract interpretation

Formal verification of a static analyzer based on abstract interpretation Formal verification of a static analyzer based on abstract interpretation Sandrine Blazy joint work with J.-H. Jourdan, V. Laporte, A. Maroneze, X. Leroy, D. Pichardie IFIP WG 1.9/2.15, 2014-07-14 1 Background:

More information

High Performance Computing in C and C++

High Performance Computing in C and C++ High Performance Computing in C and C++ Rita Borgo Computer Science Department, Swansea University Summary Introduction to C Writing a simple C program Compiling a simple C program Running a simple C program

More information

Advanced Programming Methods. Introduction in program analysis

Advanced Programming Methods. Introduction in program analysis Advanced Programming Methods Introduction in program analysis What is Program Analysis? Very broad topic, but generally speaking, automated analysis of program behavior Program analysis is about developing

More information

C Programming. Course Outline. C Programming. Code: MBD101. Duration: 10 Hours. Prerequisites:

C Programming. Course Outline. C Programming. Code: MBD101. Duration: 10 Hours. Prerequisites: C Programming Code: MBD101 Duration: 10 Hours Prerequisites: You are a computer science Professional/ graduate student You can execute Linux/UNIX commands You know how to use a text-editing tool You should

More information

Embedded Software Verification Challenges and Solutions. Static Program Analysis

Embedded Software Verification Challenges and Solutions. Static Program Analysis Embedded Software Verification Challenges and Solutions Static Program Analysis Chao Wang chaowang@nec-labs.com NEC Labs America Princeton, NJ ICCAD Tutorial November 11, 2008 www.nec-labs.com 1 Outline

More information

CSCI 171 Chapter Outlines

CSCI 171 Chapter Outlines Contents CSCI 171 Chapter 1 Overview... 2 CSCI 171 Chapter 2 Programming Components... 3 CSCI 171 Chapter 3 (Sections 1 4) Selection Structures... 5 CSCI 171 Chapter 3 (Sections 5 & 6) Iteration Structures

More information

Frama-C Value Analysis

Frama-C Value Analysis Frama-C Value Analysis Séminaire CAP TRONIC Virgile Prevosto virgile.prevosto@cea.fr June 18 th, 2015 Outline Introduction Abstract domains Arithmetic Memory Methodology Basic commands Parameters Introduction

More information

The CPU and Memory. How does a computer work? How does a computer interact with data? How are instructions performed? Recall schematic diagram:

The CPU and Memory. How does a computer work? How does a computer interact with data? How are instructions performed? Recall schematic diagram: The CPU and Memory How does a computer work? How does a computer interact with data? How are instructions performed? Recall schematic diagram: 1 Registers A register is a permanent storage location within

More information

Lecture 6. Abstract Interpretation

Lecture 6. Abstract Interpretation Lecture 6. Abstract Interpretation Wei Le 2014.10 Outline Motivation History What it is: an intuitive understanding An example Steps of abstract interpretation Galois connection Narrowing and Widening

More information

CSE 504. Expression evaluation. Expression Evaluation, Runtime Environments. One possible semantics: Problem:

CSE 504. Expression evaluation. Expression Evaluation, Runtime Environments. One possible semantics: Problem: Expression evaluation CSE 504 Order of evaluation For the abstract syntax tree + + 5 Expression Evaluation, Runtime Environments + + x 3 2 4 the equivalent expression is (x + 3) + (2 + 4) + 5 1 2 (. Contd

More information

Software Engineering using Formal Methods

Software Engineering using Formal Methods Software Engineering using Formal Methods Introduction to Promela Wolfgang Ahrendt & Richard Bubel & Reiner Hähnle & Wojciech Mostowski 31 August 2011 SEFM: Promela /GU 110831 1 / 35 Towards Model Checking

More information

CIS 1.5 Course Objectives. a. Understand the concept of a program (i.e., a computer following a series of instructions)

CIS 1.5 Course Objectives. a. Understand the concept of a program (i.e., a computer following a series of instructions) By the end of this course, students should CIS 1.5 Course Objectives a. Understand the concept of a program (i.e., a computer following a series of instructions) b. Understand the concept of a variable

More information

Programming Languages Lecture 14: Sum, Product, Recursive Types

Programming Languages Lecture 14: Sum, Product, Recursive Types CSE 230: Winter 200 Principles of Programming Languages Lecture 4: Sum, Product, Recursive Types The end is nigh HW 3 No HW 4 (= Final) Project (Meeting + Talk) Ranjit Jhala UC San Diego Recap Goal: Relate

More information

Software Engineering using Formal Methods

Software Engineering using Formal Methods Software Engineering using Formal Methods Introduction to Promela Wolfgang Ahrendt 03 September 2015 SEFM: Promela /GU 150903 1 / 36 Towards Model Checking System Model Promela Program byte n = 0; active

More information

IMPORTANT QUESTIONS IN C FOR THE INTERVIEW

IMPORTANT QUESTIONS IN C FOR THE INTERVIEW IMPORTANT QUESTIONS IN C FOR THE INTERVIEW 1. What is a header file? Header file is a simple text file which contains prototypes of all in-built functions, predefined variables and symbolic constants.

More information

Introduction to C. Why C? Difference between Python and C C compiler stages Basic syntax in C

Introduction to C. Why C? Difference between Python and C C compiler stages Basic syntax in C Final Review CS304 Introduction to C Why C? Difference between Python and C C compiler stages Basic syntax in C Pointers What is a pointer? declaration, &, dereference... Pointer & dynamic memory allocation

More information

Design and Implementation of an Abstract Interpreter for VHDL

Design and Implementation of an Abstract Interpreter for VHDL Design and Implementation of an Abstract Interpreter for VHDL STIX, Charles Hymans École Polytechnique, 91128 Palaiseau, France charles.hymans@polytechnique.fr Abstract. We describe the design by abstract

More information

Static Program Checking

Static Program Checking Bounded Verification Jalloy Automated Software Analysis Group, Institute of Theoretical Informatics Jun.-prof. Mana Taghdiri June 5, 2014 KIT University of the State of Baden-Wuerttemberg and National

More information

AstréeA From Research To Industry

AstréeA From Research To Industry AstréeA From Research To Industry Dr.-Ing. Stephan Wilhelm, AbsInt GmbH Workshop on Static Analysis of Concurrent Software Edinburgh, 2016 2 AbsInt Angewandte Informatik GmbH Provides advanced development

More information

CS 6110 S11 Lecture 12 Naming and Scope 21 February 2011

CS 6110 S11 Lecture 12 Naming and Scope 21 February 2011 CS 6110 S11 Lecture 12 Naming and Scope 21 February 2011 In this lecture we introduce the topic of scope in the context of the λ-calculus and define translations from λ-cbv to FL for the two most common

More information

Programmiersprachen (Programming Languages)

Programmiersprachen (Programming Languages) 2016-05-13 Preface Programmiersprachen (Programming Languages) coordinates: lecturer: web: usable for: requirements: No. 185.208, VU, 3 ECTS Franz Puntigam http://www.complang.tuwien.ac.at/franz/ps.html

More information

Abstract Interpretation of Floating-Point Computations

Abstract Interpretation of Floating-Point Computations Abstract Interpretation of Floating-Point Computations Sylvie Putot Laboratory for ModElling and Analysis of Systems in Interaction, CEA-LIST/X/CNRS Session: Static Analysis for Safety and Performance

More information

5. Semantic Analysis!

5. Semantic Analysis! 5. Semantic Analysis! Prof. O. Nierstrasz! Thanks to Jens Palsberg and Tony Hosking for their kind permission to reuse and adapt the CS132 and CS502 lecture notes.! http://www.cs.ucla.edu/~palsberg/! http://www.cs.purdue.edu/homes/hosking/!

More information

G Programming Languages - Fall 2012

G Programming Languages - Fall 2012 G22.2110-003 Programming Languages - Fall 2012 Lecture 3 Thomas Wies New York University Review Last week Names and Bindings Lifetimes and Allocation Garbage Collection Scope Outline Control Flow Sequencing

More information

A Formally-Verified C static analyzer

A Formally-Verified C static analyzer A Formally-Verified C static analyzer David Pichardie joint work with J.-H. Jourdan, V. Laporte, S.Blazy, X. Leroy, presented at POPL 15!! How do you trust your software? bug finders sound verifiers verified

More information

Applications of Formal Verification

Applications of Formal Verification Applications of Formal Verification Model Checking: Introduction to PROMELA Bernhard Beckert Mattias Ulbrich SS 2017 KIT INSTITUT FÜR THEORETISCHE INFORMATIK KIT University of the State of Baden-Württemberg

More information

About the Authors... iii Introduction... xvii. Chapter 1: System Software... 1

About the Authors... iii Introduction... xvii. Chapter 1: System Software... 1 Table of Contents About the Authors... iii Introduction... xvii Chapter 1: System Software... 1 1.1 Concept of System Software... 2 Types of Software Programs... 2 Software Programs and the Computing Machine...

More information

Static Analysis: Overview, Syntactic Analysis and Abstract Interpretation TDDC90: Software Security

Static Analysis: Overview, Syntactic Analysis and Abstract Interpretation TDDC90: Software Security Static Analysis: Overview, Syntactic Analysis and Abstract Interpretation TDDC90: Software Security Ahmed Rezine IDA, Linköpings Universitet Hösttermin 2014 Outline Overview Syntactic Analysis Abstract

More information

STATIC ANALYSIS OF RUN-TIME ERRORS IN EMBEDDED REAL-TIME PARALLEL C PROGRAMS ANTOINE MINÉ

STATIC ANALYSIS OF RUN-TIME ERRORS IN EMBEDDED REAL-TIME PARALLEL C PROGRAMS ANTOINE MINÉ Logical Methods in Computer Science Vol. 8 (1:26) 2012, pp. 1 63 www.lmcs-online.org Submitted Sep. 7, 2011 Published Mar. 23, 2012 STATIC ANALYSIS OF RUN-TIME ERRORS IN EMBEDDED REAL-TIME PARALLEL C PROGRAMS

More information

Abstract Interpretation

Abstract Interpretation Abstract Interpretation Ranjit Jhala, UC San Diego April 22, 2013 Fundamental Challenge of Program Analysis How to infer (loop) invariants? Fundamental Challenge of Program Analysis Key issue for any analysis

More information

COMP 181. Agenda. Midterm topics. Today: type checking. Purpose of types. Type errors. Type checking

COMP 181. Agenda. Midterm topics. Today: type checking. Purpose of types. Type errors. Type checking Agenda COMP 181 Type checking October 21, 2009 Next week OOPSLA: Object-oriented Programming Systems Languages and Applications One of the top PL conferences Monday (Oct 26 th ) In-class midterm Review

More information

CS-XXX: Graduate Programming Languages. Lecture 9 Simply Typed Lambda Calculus. Dan Grossman 2012

CS-XXX: Graduate Programming Languages. Lecture 9 Simply Typed Lambda Calculus. Dan Grossman 2012 CS-XXX: Graduate Programming Languages Lecture 9 Simply Typed Lambda Calculus Dan Grossman 2012 Types Major new topic worthy of several lectures: Type systems Continue to use (CBV) Lambda Caluclus as our

More information

Types. Type checking. Why Do We Need Type Systems? Types and Operations. What is a type? Consensus

Types. Type checking. Why Do We Need Type Systems? Types and Operations. What is a type? Consensus Types Type checking What is a type? The notion varies from language to language Consensus A set of values A set of operations on those values Classes are one instantiation of the modern notion of type

More information

Static Analysis and Verification of Aerospace Software by Abstract Interpretation

Static Analysis and Verification of Aerospace Software by Abstract Interpretation Static Analysis and Verification of Aerospace Software by Abstract Interpretation Julien Bertrane École normale supérieure, Paris Patrick Cousot, Courant Institute of Mathematical Sciences, NYU, New York

More information

CMSC 330: Organization of Programming Languages. Formal Semantics of a Prog. Lang. Specifying Syntax, Semantics

CMSC 330: Organization of Programming Languages. Formal Semantics of a Prog. Lang. Specifying Syntax, Semantics Recall Architecture of Compilers, Interpreters CMSC 330: Organization of Programming Languages Source Scanner Parser Static Analyzer Operational Semantics Intermediate Representation Front End Back End

More information

Formal Systems II: Applications

Formal Systems II: Applications Formal Systems II: Applications Functional Verification of Java Programs: Java Dynamic Logic Bernhard Beckert Mattias Ulbrich SS 2017 KIT INSTITUT FÜR THEORETISCHE INFORMATIK KIT University of the State

More information

CS 267: Automated Verification. Lecture 13: Bounded Model Checking. Instructor: Tevfik Bultan

CS 267: Automated Verification. Lecture 13: Bounded Model Checking. Instructor: Tevfik Bultan CS 267: Automated Verification Lecture 13: Bounded Model Checking Instructor: Tevfik Bultan Remember Symbolic Model Checking Represent sets of states and the transition relation as Boolean logic formulas

More information

Review of the C Programming Language

Review of the C Programming Language Review of the C Programming Language Prof. James L. Frankel Harvard University Version of 11:55 AM 22-Apr-2018 Copyright 2018, 2016, 2015 James L. Frankel. All rights reserved. Reference Manual for the

More information

LOGIC SYNTHESIS AND VERIFICATION ALGORITHMS. Gary D. Hachtel University of Colorado. Fabio Somenzi University of Colorado.

LOGIC SYNTHESIS AND VERIFICATION ALGORITHMS. Gary D. Hachtel University of Colorado. Fabio Somenzi University of Colorado. LOGIC SYNTHESIS AND VERIFICATION ALGORITHMS by Gary D. Hachtel University of Colorado Fabio Somenzi University of Colorado Springer Contents I Introduction 1 1 Introduction 5 1.1 VLSI: Opportunity and

More information

arxiv: v1 [cs.pl] 1 Dec 2016

arxiv: v1 [cs.pl] 1 Dec 2016 NSAD 2016 arxiv:1612.00277v1 [cs.pl] 1 Dec 2016 Sparsity Preserving Algorithms for Octagons Abstract Jacques-Henri Jourdan MPI-SWS, Inria Paris Known algorithms for manipulating octagons do not preserve

More information

Compiler Optimization

Compiler Optimization Compiler Optimization The compiler translates programs written in a high-level language to assembly language code Assembly language code is translated to object code by an assembler Object code modules

More information

Short Notes of CS201

Short Notes of CS201 #includes: Short Notes of CS201 The #include directive instructs the preprocessor to read and include a file into a source code file. The file name is typically enclosed with < and > if the file is a system

More information

Question Bank. 10CS63:Compiler Design

Question Bank. 10CS63:Compiler Design Question Bank 10CS63:Compiler Design 1.Determine whether the following regular expressions define the same language? (ab)* and a*b* 2.List the properties of an operator grammar 3. Is macro processing a

More information

Research on the Static Analysis Method of the Localization Embedded Platform Software Code Zhijie Gaoa, Ling Lu, Wen Jiao

Research on the Static Analysis Method of the Localization Embedded Platform Software Code Zhijie Gaoa, Ling Lu, Wen Jiao 6th International Conference on Information Engineering for Mechanics and Materials (ICIMM 2016) Research on the Static Analysis Method of the Localization Embedded Platform Software Code Zhijie Gaoa,

More information

CS Programming In C

CS Programming In C CS 24000 - Programming In C Week Two: Basic C Program Organization and Data Types Zhiyuan Li Department of Computer Science Purdue University, USA 2 int main() { } return 0; The Simplest C Program C programs

More information

CMSC 330: Organization of Programming Languages. OCaml Imperative Programming

CMSC 330: Organization of Programming Languages. OCaml Imperative Programming CMSC 330: Organization of Programming Languages OCaml Imperative Programming CMSC330 Spring 2018 1 So Far, Only Functional Programming We haven t given you any way so far to change something in memory

More information

Topic 6: A Quick Intro To C. Reading. "goto Considered Harmful" History

Topic 6: A Quick Intro To C. Reading. goto Considered Harmful History Topic 6: A Quick Intro To C Reading Assumption: All of you know basic Java. Much of C syntax is the same. Also: Some of you have used C or C++. Goal for this topic: you can write & run a simple C program

More information

CS201 - Introduction to Programming Glossary By

CS201 - Introduction to Programming Glossary By CS201 - Introduction to Programming Glossary By #include : The #include directive instructs the preprocessor to read and include a file into a source code file. The file name is typically enclosed with

More information

Floating-point numbers. Phys 420/580 Lecture 6

Floating-point numbers. Phys 420/580 Lecture 6 Floating-point numbers Phys 420/580 Lecture 6 Random walk CA Activate a single cell at site i = 0 For all subsequent times steps, let the active site wander to i := i ± 1 with equal probability Random

More information

CMSC 330: Organization of Programming Languages. OCaml Imperative Programming

CMSC 330: Organization of Programming Languages. OCaml Imperative Programming CMSC 330: Organization of Programming Languages OCaml Imperative Programming CMSC330 Fall 2017 1 So Far, Only Functional Programming We haven t given you any way so far to change something in memory All

More information

Applications of Formal Verification

Applications of Formal Verification Applications of Formal Verification Model Checking: Introduction to PROMELA Prof. Dr. Bernhard Beckert Dr. Vladimir Klebanov SS 2012 KIT INSTITUT FÜR THEORETISCHE INFORMATIK KIT University of the State

More information

Introduction to CBMC. Software Engineering Institute Carnegie Mellon University Pittsburgh, PA Arie Gurfinkel December 5, 2011

Introduction to CBMC. Software Engineering Institute Carnegie Mellon University Pittsburgh, PA Arie Gurfinkel December 5, 2011 Software Engineering Institute Carnegie Mellon University Pittsburgh, PA 15213 December 5, 2011 based on slides by Daniel Kroening Bug Catching with SAT-Solvers Main Idea: Given a program and a claim use

More information

Absolute C++ Walter Savitch

Absolute C++ Walter Savitch Absolute C++ sixth edition Walter Savitch Global edition This page intentionally left blank Absolute C++, Global Edition Cover Title Page Copyright Page Preface Acknowledgments Brief Contents Contents

More information

Duet: Static Analysis for Unbounded Parallelism

Duet: Static Analysis for Unbounded Parallelism Duet: Static Analysis for Unbounded Parallelism Azadeh Farzan and Zachary Kincaid University of Toronto Abstract. Duet is a static analysis tool for concurrent programs in which the number of executing

More information

Symbolic Evaluation/Execution

Symbolic Evaluation/Execution Symbolic Evaluation/Execution Reading Assignment *R.W. Floyd, "Assigning Meaning to Programs, Symposium on Applied Mathematics, 1967, pp. 19-32 (Appeared as volume 19 of Mathematical Aspects of Computer

More information

BOOGIE. Presentation by Itsik Hefez A MODULAR REUSABLE VERIFIER FOR OBJECT-ORIENTED PROGRAMS MICROSOFT RESEARCH

BOOGIE. Presentation by Itsik Hefez A MODULAR REUSABLE VERIFIER FOR OBJECT-ORIENTED PROGRAMS MICROSOFT RESEARCH BOOGIE A MODULAR REUSABLE VERIFIER FOR OBJECT-ORIENTED PROGRAMS MICROSOFT RESEARCH Presentation by Itsik Hefez Introduction Boogie is an intermediate verification language, intended as a layer on which

More information

Midterm 1 topics (in one slide) Bits and bitwise operations. Outline. Unsigned and signed integers. Floating point numbers. Number representation

Midterm 1 topics (in one slide) Bits and bitwise operations. Outline. Unsigned and signed integers. Floating point numbers. Number representation Midterm 1 topics (in one slide) CSci 2021: Review Lecture 1 Stephen McCamant University of Minnesota, Computer Science & Engineering Number representation Bits and bitwise operators Unsigned and signed

More information

1 Introduction. 3 Syntax

1 Introduction. 3 Syntax CS 6110 S18 Lecture 19 Typed λ-calculus 1 Introduction Type checking is a lightweight technique for proving simple properties of programs. Unlike theorem-proving techniques based on axiomatic semantics,

More information

Review of the C Programming Language for Principles of Operating Systems

Review of the C Programming Language for Principles of Operating Systems Review of the C Programming Language for Principles of Operating Systems Prof. James L. Frankel Harvard University Version of 7:26 PM 4-Sep-2018 Copyright 2018, 2016, 2015 James L. Frankel. All rights

More information