Contributions à l'analyse statique de programmes manipulant des tableaux - TEL - Thèses en ligne Accéder directement au contenu
Thèse Année : 2010

Contributions to the Static Analysis of Programs Handling Arrays

Contributions à l'analyse statique de programmes manipulant des tableaux

Mathias Péron
  • Fonction : Auteur
  • PersonId : 910220

Résumé

Array bound checking has been widely studied. However, there are very few convincing results about array contents analysis. For such an analysis, numerical analyses are fundamental. In particular, when assigning a[i], knowledge about a[j] is kept unchanged if the invariant i ≠ j is discovered. We propose a new weakly relational numerical analysis, combining potential constraints (x - y ≤ c or ±x ≤ c) with disequalities (x ≠ y or x ≠ 0). If the variables are valued in a dense set, the analysis runs in O(n4). In the arithmetic case, the satisfiability problem of the conjunction of such constraints is NP-complete. We propose an analysis with complexity O(n4) for this case too. In the core of array contents analyses we also find symbolic partitioning analyses. To precisely analyze a loop "for i = 1 to n", in which an array is accessed at index i, slices [1, i - 1], [i, i] and [i + 1, n] of arrays contents must be considered. We define a semantic partitioning analysis and then an array contents analysis based on its results. This later analysis binds to each slice φ a property ψ whose variables stand for the arrays contents of the slice. The properties ψ are interpreted pointwise on the slice. So for φ = [1, i - 1] and ψ = (a = b + 1), it means that ∀ k ∈ [1, i - 1], a[k] = b[k] + 1. Experimental results show that our automatic analysis is efficient and precise on simple programs: one-dimensional arrays, indexed by one variable at most (x + c or c), traversed by possibly nested "for" loops, the counters of which follow an arithmetic progression. The analysis is able, for instance, to discover that the result of an insertion sort is a sorted array, or that, in an array traversal guarded by a "sentinel", the index stays within the bounds.
Si l'analyse automatique des accès aux tableaux a été largement étudiée, on trouve très peu de résultats convaincants sur l'analyse du contenu des tableaux. Pour une telle analyse, les analyses numériques sont centrales. Notamment, si l'on découvre l'invariant i ≠ j, on évite d'affaiblir la connaissance sur a[j] lors d'une affectation à a[i]. Nous proposons une nouvelle analyse numérique faiblement relationnelle, combinant des contraintes de zones (x - y ≤ c ou ±x ≤ c) à des contraintes de non-égalités (x ≠ y ou x ≠ 0). Cette analyse a une complexité en O(n4), si les variables prennent leur valeurs dans un ensemble dense. Dans le cas arithmétique, décider de la satisfaisabilité d'une conjonction de telles contraintes est un problème NP-complet. Nous proposons une analyse en O(n4) également pour ce cas. Au cœur des analyses du contenu des tableaux on trouve aussi des analyses de partitionnement symbolique. Pour une boucle " for i = 1 to n ", où un tableau est accédé à la cellule i, il est nécessaire de considérer le contenu des tableaux sur les tranches [1, i - 1], [i, i] et [i + 1, n] pour être précis. Nous définissons une analyse de partitionnement sémantique, puis une analyse du contenu des tableaux basée sur ses résultats. Cette dernière associe à chaque tranche φ une propriété ψ dont les variables représentent le contenu des tableaux sur cette tranche. La propriété ψ est interprétée cellule-par-cellule, ainsi pour φ = [1, i - 1] et ψ = (a = b + 1) il est exprimé que ∀ k ∈ [1, i - 1], a[k] = b[k] + 1. Les résultats expérimentaux montrent que notre analyse automatique est efficace et précise, sur une classe de programmes simples : tableaux unidimensionnels, indexés par une variable au plus (x + c ou c), traversés par des boucles, imbriquées ou non, avec des compteurs suivant une progression arithmétique. Elle découvre par exemple que le résultat d'un tri par insertion est un tableau trié, ou que durant le parcours d'un tableau gardé par une "sentinelle", tous les accès à ce tableau sont corrects.
Fichier principal
Vignette du fichier
mathias.peron.pdf (2.43 Mo) Télécharger le fichier
Loading...

Dates et versions

tel-00623697 , version 1 (14-09-2011)

Identifiants

  • HAL Id : tel-00623697 , version 1

Citer

Mathias Péron. Contributions à l'analyse statique de programmes manipulant des tableaux. Informatique [cs]. Université de Grenoble, 2010. Français. ⟨NNT : ⟩. ⟨tel-00623697⟩
213 Consultations
211 Téléchargements

Partager

Gmail Facebook X LinkedIn More