Claus Brabrand, ITU, Denmark Mar 23, 2009STATIC ANALYSIS (DATA-FLOW ANALYSIS) Static Analysis: Data-Flow Analysis I Claus Brabrand IT University of Copenhagen.

Slides:



Advertisements
Similar presentations
Claus Brabrand, UFPE, Brazil Aug 11, 2010DATA-FLOW ANALYSIS Claus Brabrand ((( ))) Associate Professor, Ph.D. ((( Programming, Logic, and.
Advertisements

Compilation 2011 Static Analysis Johnni Winther Michael I. Schwartzbach Aarhus University.
Chair of Software Engineering From Program slicing to Abstract Interpretation Dr. Manuel Oriol.
CSCI 51 Introduction to Programming Dr. Joshua Stough February 10, 2009.
Claus Brabrand, ITU, Denmark Feb 26, 2008WHITE-BOX TESTING White-Box Testing Claus Brabrand [ ] ( “FÅP”: First-year Project Course, ITU,
Claus Brabrand, ITU, Denmark Feb 17, 2009WHITE-BOX TESTING White-Box Testing Claus Brabrand [ ] ( “FÅP”: First-year Project Course, ITU,
Claus Brabrand, ITU, Denmark STATIC ANALYSIS (DATA-FLOW ANALYSIS)Apr 09, 2008 Static Analysis: Data-Flow Analysis IV Claus Brabrand ITU - IT University.
1 Introduction to Computability Theory Lecture12: Reductions Prof. Amos Israeli.
1 CSE 417: Algorithms and Computational Complexity Winter 2001 Lecture 20 Instructor: Paul Beame.
Recap from last time We were trying to do Common Subexpression Elimination Compute expressions that are available at each program point.
5-1 Flow of Control Recitation-01/25/2008  CS 180  Department of Computer Science  Purdue University.
Introduction to Computers and Programming Lecture 4: Mathematical Operators New York University.
Introduction to Computers and Programming Lecture 5 New York University.
Control Flow Analysis Mooly Sagiv Tel Aviv University Sunday Scrieber 8 Monday Schrieber.
Selection Statements choice of one among several blocks of code Java supports 3 kinds of selection statements: if statement – selects one block or leaves.
Conditions What if?. Flow of Control The order of statement execution is called the flow of control Unless specified otherwise, the order of statement.
4/25/08Prof. Hilfinger CS164 Lecture 371 Global Optimization Lecture 37 (From notes by R. Bodik & G. Necula)
1 Control Flow Analysis Mooly Sagiv Tel Aviv University Textbook Chapter 3
Introduction to Computers and Programming Lecture 10: For Loops Professor: Evan Korth New York University.
Introduction to Computers and Programming Lecture 5 Boolean type; if statement Professor: Evan Korth New York University.
Loops – While, Do, For Repetition Statements Introduction to Arrays
PSUCS322 HM 1 Languages and Compiler Design II Parameter Passing Material provided by Prof. Jingke Li Stolen with pride and modified by Herb Mayer PSU.
Claus Brabrand, ITU, Denmark Feb 17, 2009WHITE-BOX TESTING White-Box Testing Claus Brabrand [ ] ( “FÅP”: First-year Project Course, ITU,
1 Program Analysis Mooly Sagiv Tel Aviv University Textbook: Principles of Program Analysis.
Program Analysis Mooly Sagiv Tel Aviv University Sunday Scrieber 8 Monday Schrieber.
COMP 110 Introduction to Programming Mr. Joshua Stough September 19, 2007.
Claus Brabrand, ITU, Denmark DATA-FLOW ANALYSISMar 25, 2009 Static Analysis: Data-Flow Analysis II Claus Brabrand IT University of Copenhagen (
Claus Brabrand, UFPE, Brazil Aug 09, 2010DATA-FLOW ANALYSIS Claus Brabrand ((( ))) Associate Professor, Ph.D. ((( Programming, Logic, and.
Claus Brabrand, UFPE, Brazil Aug 04, 2010DATA-FLOW ANALYSIS Claus Brabrand ((( ))) Associate Professor, Ph.D. ((( Programming, Logic, and.
CSM-Java Programming-I Spring,2005 Control Flow Lesson - 3.
TODAY’S LECTURE Review Chapter 2 Go over exercises.
UNIT II Decision Making And Branching Decision Making And Looping
CIS3931 – Intro to JAVA Lecture Note Set 3 19-May-05.
Language Evaluation Criteria
Cs3102: Theory of Computation Class 18: Proving Undecidability Spring 2010 University of Virginia David Evans.
Lecture Set 5 Control Structures Part D - Repetition with Loops.
The Java Programming Language
Loops: Handling Infinite Processes CS 21a: Introduction to Computing I First Semester,
Loops and Iteration for Statements, while Statements and do-while Statements.
Basics of Java IMPORTANT: Read Chap 1-6 of How to think like a… Lecture 3.
Hello.java Program Output 1 public class Hello { 2 public static void main( String [] args ) 3 { 4 System.out.println( “Hello!" ); 5 } // end method main.
Netprog: Java Intro1 Crash Course in Java. Netprog: Java Intro2 Why Java? Network Programming in Java is very different than in C/C++ –much more language.
COP-3330: Object Oriented Programming Flow Control May 16, 2012 Eng. Hector M Lugo-Cordero, MS.
Chapter 5: Control Structures II J ava P rogramming: From Problem Analysis to Program Design, From Problem Analysis to Program Design,
Introduction to Programming Prof. Rommel Anthony Palomino Department of Computer Science and Information Technology Spring 2011.
Compiler Principles Fall Compiler Principles Lecture 0: Local Optimizations Roman Manevich Ben-Gurion University.
CMP-MX21: Lecture 4 Selections Steve Hordley. Overview 1. The if-else selection in JAVA 2. More useful JAVA operators 4. Other selection constructs in.
Chapter 7 Selection Dept of Computer Engineering Khon Kaen University.
Introduction to Java Java Translation Program Structure
Topic 3: C Basics CSE 30: Computer Organization and Systems Programming Winter 2011 Prof. Ryan Kastner Dept. of Computer Science and Engineering University.
© M. Gross, ETH Zürich, 2014 Informatik I für D-MAVT (FS 2014) Exercise 4 – Logical Operators & Branching.
Matlab tutorial course Lesson 4: Writing your own functions: programming constructs
Review TEST 2 Chapters 4,5,7. QUESTION For which type of operands does the == operator always work correctly: (a) int, (b) double, or (c) String?
 Control Flow statements ◦ Selection statements ◦ Iteration statements ◦ Jump statements.
Types and Programming Languages
CSE 311 Foundations of Computing I Lecture 28 Computability: Other Undecidable Problems Autumn 2011 CSE 3111.
Application development with Java Lecture 6 Rina Zviel-Girshin.
JavaScript and Ajax (Control Structures) Week 4 Web site:
Types and Programming Languages Lecture 3 Simon Gay Department of Computing Science University of Glasgow 2006/07.
1 Flow of Control Chapter 5. 2 Objectives You will be able to: Use the Java "if" statement to control flow of control within your program.  Use the Java.
4 - Conditional Control Structures CHAPTER 4. Introduction A Program is usually not limited to a linear sequence of instructions. In real life, a programme.
© 2011 Pearson Education, publishing as Addison-Wesley Chapter 1: Computer Systems Presentation slides for Java Software Solutions for AP* Computer Science.
Introduction to Programming G50PRO University of Nottingham Unit 6 : Control Flow Statements 2 Paul Tennent
Chapter 7 Control Structures. Java has very flexible three looping mechanisms. You can use one of the following three loops:  while Loop  do...while.
Semantic Analysis with Emphasis on Name Analysis
Chapter 5: Control Structures II
Lecture 23 Pages : Separating Syntactic Analysis from Execution. We omit many details so you have to read the section in the book. The halting.
Selection Statements.
Controlling Program Flow
Static Analysis: Data-Flow Analysis I
Presentation transcript:

Claus Brabrand, ITU, Denmark Mar 23, 2009STATIC ANALYSIS (DATA-FLOW ANALYSIS) Static Analysis: Data-Flow Analysis I Claus Brabrand IT University of Copenhagen ( ) ( AMP’09: Advanced Models & Programs, 2009 )

[ 2 ] Claus Brabrand, ITU, Denmark STATIC ANALYSIS (DATA-FLOW ANALYSIS)Mar 23, 2009 Agenda (23/3, ’09) Introduction: Undecidability, Reduction, and Approximation Data-flow Analysis: Quick tour & running example Control-Flow Graphs: Control-flow, data-flow, and confluence ”Science-Fiction Math”: Lattice theory, monotonicity, and fixed-points Putting it all together…: Example revisited

[ 3 ] Claus Brabrand, ITU, Denmark STATIC ANALYSIS (DATA-FLOW ANALYSIS)Mar 23, 2009 Breaks? #Breaks, |Breaks|,...? I’ll aim for: more (but shorter) breaks

[ 4 ] Claus Brabrand, ITU, Denmark STATIC ANALYSIS (DATA-FLOW ANALYSIS)Mar 23, 2009 Funny Point… [PS] told you that arrays are just ptr’s (in ’C’): ” E 1 [E 2 ] ” gets turned into ” *(E 1 +E 2 ) ” e.g., But we also know that ”+” is commutative: i.e., Thus: i.e., you may as well write ” 7[a] ” instead of ” a[7] ” which is the exact same thing; …try it out! :-) *(a+7) *(7+a)7[a] a[7]    *(a+7) a[7]   x,y: x + y = y + x

[ 5 ] Claus Brabrand, ITU, Denmark STATIC ANALYSIS (DATA-FLOW ANALYSIS)Mar 23, 2009 ”C” is a really weird lang… #include #include int main(char* args[]) { int* a = (int*) malloc(3*sizeof(int)); a[2] = 7; int weird = 2[a]; printf(“you’d think there’d be a type error, but this program compiles w/o warning and prints out seven (%d) just fine :-)\n", weird); return 1; }

[ 6 ] Claus Brabrand, ITU, Denmark STATIC ANALYSIS (DATA-FLOW ANALYSIS)Mar 23, 2009 Notes on Static Analysis ”Lecture Notes on Static Analysis” by Michael I. Schwartzbach (BRICS, Uni. Aarhus) Chapter 1, 2, 4, 5, 6 (until p. 19) (Excl. ”pointers”) Claims to be "not overly formal", but the math involved can be quite challenging (at times)…

[ 7 ] Claus Brabrand, ITU, Denmark STATIC ANALYSIS (DATA-FLOW ANALYSIS)Mar 23, 2009 Purpose (of static analysis): Gather information (on running behavior of program) ”  program points” Usage (of static analysis): Basis for subsequent…: Error detection Static Analysis Optimization information  program points

[ 8 ] Claus Brabrand, ITU, Denmark STATIC ANALYSIS (DATA-FLOW ANALYSIS)Mar 23, 2009 Analyses for Optimization Example Analyses: ”Constant Propagation Analysis”: Precompute constants (e.g., replace ’ 5*x+z ’ by ’ 42 ’) ”Live Variables Analysis”: Dead-code elimination (e.g., get rid of unused variable ’ z ’) ”Available Expressions Analysis”: Avoid recomputing already computed exprs (cache results) … … … …

[ 9 ] Claus Brabrand, ITU, Denmark STATIC ANALYSIS (DATA-FLOW ANALYSIS)Mar 23, 2009 Analyses for Finding Errors Example Analyses: ”Symbol Checking”: Catch (dynamic) symbol errors ”Type Checking”: Catch (dynamic) type errors ”Initialized Variable Analysis”: Catch unintialized variables … … … …

[ 10 ] Claus Brabrand, ITU, Denmark STATIC ANALYSIS (DATA-FLOW ANALYSIS)Mar 23, 2009 Quiz z z z z : Optimization? If you want a fast C-program, should you use: LOOP 1: LOOP 2 (optimized by programmer): i.e., ”array-version” or ”optimized pointer-version” ? b = a; for (i = 0; i < N; i++) { *b = *b * 2000; *b = *b / 10000; b++; } for (i = 0; i < N; i++) { a[i] = a[i] * 2000; a[i] = a[i] / 10000; } ? ? …or…

[ 11 ] Claus Brabrand, ITU, Denmark STATIC ANALYSIS (DATA-FLOW ANALYSIS)Mar 23, 2009 Results (of running the programs): Compilers use highly sophisticated static analyses for optimization! Recommendation: focus on writing clear code (for people and for compilers to understand) Answer: You’ll learn how to make similar analyses [next two weeks]

[ 12 ] Claus Brabrand, ITU, Denmark STATIC ANALYSIS (DATA-FLOW ANALYSIS)Mar 23, 2009

Claus Brabrand, ITU, Denmark Mar 23, 2009STATIC ANALYSIS (DATA-FLOW ANALYSIS) Conceptual Motivation Undecidability Reduction principle Approximation

[ 14 ] Claus Brabrand, ITU, Denmark STATIC ANALYSIS (DATA-FLOW ANALYSIS)Mar 23, 2009 Rice’s Theorem (1953) Examples: does program ’P’ always halt? is the value of integer variable ’x’ always positive? does variable ’x’ always have the same value? which variables can pointer ’p’ point to? does expression ’E’ always evaluate to true? what are the possible outputs of program ’P’? … “Any interesting problem about the runtime behavior of a program* is undecidable” -- Rice’s Theorem [paraphrased] (1953) “Any interesting problem about the runtime behavior of a program* is undecidable” -- Rice’s Theorem [paraphrased] (1953) *) written in a turing-complete language

[ 15 ] Claus Brabrand, ITU, Denmark STATIC ANALYSIS (DATA-FLOW ANALYSIS)Mar 23, 2009 Undecidability (self-referentiality) Consider "The Book-of-all-Books": This book contains the titles of all books that do not have a self-reference (i.e. don't contain their title inside) Finitely many books; i.e.: We can sit down & figure out whether to include or not... Q: What about "The Book-of-all-Books" ; Should it be included or not? "Self-referential paradox" (many guises): e.g. "This sentence is false" "The Bible" "War and P e ac e" "Programm i n g La nguages, An Interp.- B a s e d Approach"... The Book-of-all-Books

[ 16 ] Claus Brabrand, ITU, Denmark STATIC ANALYSIS (DATA-FLOW ANALYSIS)Mar 23, 2009 Termination Undecidable! Assume termination is decidable (in Java); i.e.  some program, halts: Program  bool Q: Does P 0 loop or terminate...?:) Hence: halts cannot exist! i.e., "Termination is undecidable" bool halts(Program p) {... } Program p 0 = read_program("P 0.java"); if (halts(p 0 )) loop(); else halt(); -- P 0.java -- bool halts(Program p) {... } *) for turing-complete languages

[ 17 ] Claus Brabrand, ITU, Denmark STATIC ANALYSIS (DATA-FLOW ANALYSIS)Mar 23, 2009 Rice’s Theorem (1953) Examples: does program ’P’ always halt? is the value of integer variable ’x’ always positive? does variable ’x’ always have the same value? which variables can pointer ’p’ point to? does expression ’E’ always evaluate to true? what are the possible outputs of program ’P’? … “Any interesting problem about the runtime behavior program* is undecidable” -- Rice’s Theorem [paraphrased] (1953) “Any interesting problem about the runtime behavior program* is undecidable” -- Rice’s Theorem [paraphrased] (1953) reduction *) written in a turing-complete language

[ 18 ] Claus Brabrand, ITU, Denmark STATIC ANALYSIS (DATA-FLOW ANALYSIS)Mar 23, 2009 solve always-pos  solve halts 1)Assume ’x-is-always-pos(P)’ is decidable 2)Given P (here’s how we could solve ’halts(P)’): 3)Construct (clever) reduction program R: 4)Run ”supposedly decidable” analysis: res = 5)Deduce from result: if (res) then P loops!; else P halts :-) 6)THUS: ’x-is-always-pos(P)’ must be undecidable! -- R.java -- int x = 1; P /* insert program P here :-) */ x = -1; x-is-always-positive(R)

[ 19 ] Claus Brabrand, ITU, Denmark STATIC ANALYSIS (DATA-FLOW ANALYSIS)Mar 23, 2009 Reduction Principle Reduction principle (in short): Example: Exercise: Carry out reduction + whole explanation for: ” which variables can pointer ’p’ point to?”  (P) undecidable  [solve  (P)  solve  (P)]  (P) undecidable ’halts(P)’ undecidable  [solve ’x-is-always-pos(P)’  solve ’halts(P)’] ’x-is-always-pos(P)’ undecidable reduction

[ 20 ] Claus Brabrand, ITU, Denmark STATIC ANALYSIS (DATA-FLOW ANALYSIS)Mar 23, 2009 Answer 1)Assume ’which-var-q-points-to(P)’ is decidable: 2)Given P (here’s how to (cleverly) decide halts(P)): 3)Construct (clever) reduction program R: 4)Run ’which-var-p-points-to(R)’ = res 5)If (null  res) P halts! else; P loops! :-) 6)THUS: ’which-var-q-points-to(P)’ must be undecidable! ptr q = 0xffff; P /* insert program P */ q = null; -- R.java --

[ 21 ] Claus Brabrand, ITU, Denmark STATIC ANALYSIS (DATA-FLOW ANALYSIS)Mar 23, 2009 Undecidability Undecidability means that…: …no-one can decide this line (for all programs)! However(!)… halts loops ?

[ 22 ] Claus Brabrand, ITU, Denmark STATIC ANALYSIS (DATA-FLOW ANALYSIS)Mar 23, 2009 “Side-Stepping Undecidability” Compilers use safe approximations (computed via ”static analyses”) such that: However, just because it’s undecidable, doesn’t mean there aren’t (good) approximations! Indeed, the whole area of static analysis works on “side-stepping undecidability”: ok error ok error Okay!Dunno? Error!

[ 23 ] Claus Brabrand, ITU, Denmark STATIC ANALYSIS (DATA-FLOW ANALYSIS)Mar 23, 2009 “Side-Stepping Undecidability” Unsafe approximation: For testing it may be okay to ”abandon” safety and use unsafe approximations: However, just because it’s undecidable, doesn’t mean there aren’t (good) approximations! Indeed, the whole area of static analysis works on “side-stepping undecidability”: halts loops unsafe approximation Here are some programs for you to (manually) consider ! ok error

[ 24 ] Claus Brabrand, ITU, Denmark STATIC ANALYSIS (DATA-FLOW ANALYSIS)Mar 23, 2009 “Slack” Undecidability means: “there’ll always be a slack”: However, still useful: (possible interpretations of “Dunno?”): Treat as error (i.e., reject program): “Sorry, program not accepted!” Treat as warning (i.e., warn programmer): “Here are some potential problems: …” halts loops Dunno?.. Okay!.

[ 25 ] Claus Brabrand, ITU, Denmark STATIC ANALYSIS (DATA-FLOW ANALYSIS)Mar 23, 2009 Soundness & Completeness Soundness: Analysis reports no errors  Really are no errors Completeness: Analysis reports an error  Really is an error ok error Sound analysis ok error Complete analysis …or alternative (equivalent) formulation, via ”contra-position”: P  Q  Q   P  Really no error(s)  Analysis reports no error(s) Really are error(s)  Analysis reports error(s)

[ 26 ] Claus Brabrand, ITU, Denmark STATIC ANALYSIS (DATA-FLOW ANALYSIS)Mar 23, 2009 Example: Type Checking Will this program have type error (when run)? Undecidable (because of reduction): Type error  evaluates to true void f() { var b; if ( ) { b = 42; } else { b = true; } /* some code */ if (b)...; // error is b is '42' } Undecidable (in all cases) i.e., what evaluates to (when run)

[ 27 ] Claus Brabrand, ITU, Denmark STATIC ANALYSIS (DATA-FLOW ANALYSIS)Mar 23, 2009 Example: Type Checking Hence, languages use static requirements: All variables must be declared And have only one type (throughout the program) This is (very) easy to check (i.e., "type-checking") void f() { bool b; // instead of ”var b;” /* some code */ if ( ) { b = 42; } else { b = true; } /* some more code */ } Static compiler error: Regardless of what evaluates to when run

[ 28 ] Claus Brabrand, ITU, Denmark STATIC ANALYSIS (DATA-FLOW ANALYSIS)Mar 23, 2009 Agenda (23/3, ’09) Introduction: Undecidability, Reduction, and Approximation Data-flow Analysis: Quick tour & running example Control-Flow Graphs: Control-flow, data-flow, and confluence ”Science-Fiction Math”: Lattice theory, monotonicity, and fixed-points Putting it all together…: Example revisited

Claus Brabrand, ITU, Denmark Mar 23, 2009STATIC ANALYSIS (DATA-FLOW ANALYSIS) 5’ Crash Course on Data-Flow Analysis Claus Brabrand IT University of Copenhagen ( ) ( AMP’09: Advanced Models & Programs, 2009 )

[ 30 ] Claus Brabrand, ITU, Denmark STATIC ANALYSIS (DATA-FLOW ANALYSIS)Mar 23, 2009 IDEA: We (only) need 3 things: A control-flow graph A lattice Transfer functions Example: “(integer) constant propagation” “Simulate runtime execution at compile-time using abstract values” Data-Flow Analysis

[ 31 ] Claus Brabrand, ITU, Denmark STATIC ANALYSIS (DATA-FLOW ANALYSIS)Mar 23, 2009 int x = 1; int y = 3; if (...) { x = x+2; } else { x y; } print(x,y);  int x = 1; int y = 3; x = x+2;x y; print(x,y); truefalse Control-flow graph... We (only) need 3 things:  A control-flow graph  A lattice  Transfer functions Given program:

[ 32 ] Claus Brabrand, ITU, Denmark STATIC ANALYSIS (DATA-FLOW ANALYSIS)Mar 23, 2009 A Lattice Lattice L of abstract values of interest and their relationships (i.e. ordering “  ”): Induces least-upper-bound operator: for combining information ~ “could be anything” ~ “we haven’t analyzed yet” ·· ·· “top” “bottom” We (only) need 3 things:  A control-flow graph  A lattice  Transfer functions

[ 33 ] Claus Brabrand, ITU, Denmark STATIC ANALYSIS (DATA-FLOW ANALYSIS)Mar 23, 2009 Data-Flow Analysis int x = 1; int y = 3; x = x+2;x y; print(x,y); E. E[x  1 ] E. E[y  3 ] E. E[x  E(x)  2 ] E. E[x  E(y), y  E(x)] [, ]  ENV L [, ] x y We (only) need 3 things:  A control-flow graph  A lattice  Transfer functions

[ 34 ] Claus Brabrand, ITU, Denmark STATIC ANALYSIS (DATA-FLOW ANALYSIS)Mar 23, 2009 Agenda (23/3, ’09) Introduction: Undecidability, Reduction, and Approximation Data-flow Analysis: Quick tour & running example Control-Flow Graphs: Control-flow, data-flow, and confluence ”Science-Fiction Math”: Lattice theory, monotonicity, and fixed-points Putting it all together…: Example revisited

[ 35 ] Claus Brabrand, ITU, Denmark STATIC ANALYSIS (DATA-FLOW ANALYSIS)Mar 23, 2009 Control Structures Control Structures: Statements (or Expr’s) that affect ”flow of control”: if-else : if : if ( Exp ) Stm 1 else Stm 2 if ( Exp ) Stm Stm 1 Exp truefalse Stm 2 confluence Stm Exp true false confluence The expression must be of type boolean; if it evaluates to true, the given statement is executed, otherwise not. The expression must be of type boolean; if it evaluates to true, Statement-1 is executed, otherwise Statement-2 is executed. [syntax] [semantics] [syntax] [semantics]

[ 36 ] Claus Brabrand, ITU, Denmark STATIC ANALYSIS (DATA-FLOW ANALYSIS)Mar 23, 2009 Control Structures (cont’d) while : for : while ( Exp ) Stm for (Exp 1 ; Exp 2 ; Exp 3 ) Stm Equivalent to: The expression must be of type boolean; if it evaluates to false, the given statement is skipped, otherwise it is executed and afterwards the expression is evaluated again. If it is still true, the statement is executed again. This is continued until the expression evaluates to false. { Exp1; while ( Exp2 ) { Stm Exp3; } } Stm Exp true false confluence Exp 1 ; Exp 2 true false Stm confluence Exp 3 ; [syntax] [semantics] [syntax] [semantics]

[ 37 ] Claus Brabrand, ITU, Denmark STATIC ANALYSIS (DATA-FLOW ANALYSIS)Mar 23, 2009 int x = 1; int y = 3; if (a>b) { x = x+2; } else { x y; } print(x,y);  int x = 1; int y = 3; x = x+2;x y; print(x,y); truefalse Control-flow graph a>b Given program:

[ 38 ] Claus Brabrand, ITU, Denmark STATIC ANALYSIS (DATA-FLOW ANALYSIS)Mar 23, 2009 Exercise: Draw a Control-Flow Graph for: public static void main ( String[] args ) { int mi, ma; if (args.length == 0) System.out.println("No numbers"); else { mi = ma = Integer.parseInt(args[0]); for (int i=1; i < args.length; i++) { int obs = Integer.parseInt(args[i]); if (obs > ma) ma = obs; else if (mi < obs) mi = obs; } System.out.println(”min=" + mi + "," + "max=" + ma); }} if else for if else if

[ 39 ] Claus Brabrand, ITU, Denmark STATIC ANALYSIS (DATA-FLOW ANALYSIS)Mar 23, 2009 Control-Flow Graph CFG: int mi, ma; System.out.println ("No numbers"); args.length == 0 mi = ma = Integer.parseInt(args[0]); int i=1; i < args.length i++; System.out.println(”min=" + mi + "," + "max=" + ma); int obs = Integer.parseInt(args[i]); obs > ma ma = obs; mi < obs mi = obs; true false true false true false true false

[ 40 ] Claus Brabrand, ITU, Denmark STATIC ANALYSIS (DATA-FLOW ANALYSIS)Mar 23, 2009 Control Structures (cont’d 2 ) do-while : ” ?: ”; ”conditional expression”: ” || ”; ”lazy disjunction” (aka., ”short-cut  ”): ” && ”; ”lazy conjunction” (aka., ”short-cut  ”): switch : switch ( Exp ) { Swb * } case Exp : Stm * break; do Stm while ( Exp ); default : Stm * break; Swb: Exp 1 ? Exp 2 : Exp 3 Exp 1 || Exp 2 Exp 1 && Exp 2 Exercise:

[ 41 ] Claus Brabrand, ITU, Denmark STATIC ANALYSIS (DATA-FLOW ANALYSIS)Mar 23, 2009 Control Structures (cont’d 3 ) try-catch-finally (exceptions): return / break / continue : ”method invocation”: e.g.; ”recursive method invocation”: e.g.; ”virtual dispatching”: e.g.; try Stm 1 catch ( Exp ) Stm 2 finally Stm 3 f(x) return ;return Exp ; break ;continue ; f(x)

[ 42 ] Claus Brabrand, ITU, Denmark STATIC ANALYSIS (DATA-FLOW ANALYSIS)Mar 23, 2009 Control Structures (cont’d 4 ) ”function pointers”: e.g.; ”higher-order functions”: e.g.; ”dynamic evaluation”: e.g.; Some constructions (and thus languages) require a separate control-flow analysis for determining control-flow in order to do data-flow analysis (*f)(x) f. x.(f x) eval( some-string-which-has-been-dynamically-computed )

[ 43 ] Claus Brabrand, ITU, Denmark STATIC ANALYSIS (DATA-FLOW ANALYSIS)Mar 23, 2009 Agenda (23/3, ’09) Introduction: Undecidability, Reduction, and Approximation Data-flow Analysis: Quick tour & running example Control-Flow Graphs: Control-flow, data-flow, and confluence ”Science-Fiction Math”: Lattice theory, monotonicity, and fixed-points Putting it all together…: Example revisited