On August 25, 2020 3:09:13 PM GMT+02:00, Erick Ochoa <erick.oc...@theobroma-systems.com> wrote: >Hi, > >I'm trying to understand how the escape analysis in IPA-PTA works. I >was >testing a hypothesis where if a structure contains an array of >characters and this array of characters is passed to fopen, the >structure and all subfields will escape. > >To do this, I made a program that has a global structure variable foo2 >that is has a field passed as an argument to fopen. I also made another > >variable foo whose array is initialized by the result of rand. > >However, after compiling this program with -flto -flto-partition=none >-fipa -fdump-ipa-pta -fdump-tree-all-all -Ofast (gcc --version 10.2.0) > >E.g. > >#include <stdio.h> >#include <math.h> >#include <string.h> > >struct foo_t { > char buffer1[100]; > char buffer2[100]; >}; > >struct foo_t foo; >struct foo_t foo2; > >int >main(int argc, char** argv) >{ > > fopen(foo2.buffer1, "r"); > for (int i = 0; i < 100; i++) > { > foo.buffer1[i] = rand(); > } > int i = rand(); > int retval = foo.buffer1[i % 100]; > return retval; >} > >I see the PTA dump state the following: > >ESCAPED = { STRING ESCAPED NONLOCAL foo2 } >foo = { ESCAPED NONLOCAL } >foo2 = { ESCAPED NONLOCAL } > >which I understand as >* something externally visible might point to foo2 >* foo2 might point to something externally visible >* foo might point to something externally visible
Yes. So it's exactly as your hypothesis. >I have seen that global variables are stored in the .gnu.lto_.decls LTO > >file section. In the passes I have worked on I have ignored global >variables. But can foo and foo2 be marked as escaping because the >declarations are not streamed in yet? Or is there another reason I am >not seeing? I am aware of aware of the several TODOs at the beginning >of >gcc/tree-ssa-structalias.c but I am unsure if they contribute to these >variables being marked as escaping. (Maybe TODO 1 and TODO 2?) Not sure what the problem is. Foo2 escapes because it's address is passed to a function. ? Richard. >Just FYI, I've been reading: >* Structure Aliasing in GCC >* Gimple Alias Improvements for GCC 4.5 >* Memory SSA - A Unified Approach for Sparsely Representing Memory >Operations > >Thanks, I appreciate all help!