\frametitle{New Instrumentation -- Example}
  %\framesubtitle{Example}
\lstset{% Add other global options here
 % basicstyle=\small\sffamily,
  escapechar=@% char to escape out of listings and back to LaTeX
}

\begin{lstlisting}[language=C]
int array[10];

      @$\vdots$@

array[3] = 1;

      @$\vdots$@

n = input();
@\color{red}\_\_INSTR\_check\_pointer(\&array[n]);@
array[n] = n;
  \end{lstlisting}

\begin{tikzpicture}
\tikzset{
  wn/.style={draw, fill=white,
             %line width=1pt,
	     minimum height=2em,
             %shade,
             shape=rectangle,
	     line width=0.5pt,
	     rounded corners},
 shd/.style={blur shadow={shadow blur steps=5}}
},

\node[shd, overlay, fill=yellow!30, rounded corners, draw] at (2.5, 5.6) {
\begin{lstlisting}[basicstyle=\tiny]
"find": [
           {
             "instruction": "store",
             "operands": ["<x>", "<p>"]
           }
        ],
"insert": ["__INSTR_check_pointer", "<p>"],
"where": "before",
"condition": ["!isValidPointer", "<p>"],
\end{lstlisting}
};

\node[overlay] (aux1) at (-2.2,3.7) { };
\node[overlay] (aux2) at (-2,0.8) { };
\node[overlay, opacity=0.2, fill=red, minimum width=2.3cm] (aux3) at (2.65,4.63) {};
\node[overlay, wn, shd, align=center] (pta) at (2.65, 2.7) { pointer\\analysis};
\draw[overlay, ->, dashed] (pta) edge node[sloped, yshift=3mm] { no check needed } (aux1);
%\draw[overlay, ->, dashed] (pta) edge node[sloped, yshift=-3mm] { check inserted here } (aux2);
\draw[overlay, ->, dashed] (aux3) edge node[xshift=7mm, yshift=-2mm] { query } (pta);
\end{tikzpicture}
