📄 pr15262-1.c
字号:
/* PR 15262. The alias analyzer only considers relations between pointers and symbols. If two pointers P and Q point to the same symbol S, then their respective memory tags will either be the same or they will have S in their alias set. However, if there are no common symbols between P and Q, TBAA will currently miss their alias relationship altogether. */struct A{ int t; int i;};int foo () { return 3; }main (){ struct A loc, *locp; float f, g, *p; int T355, *T356; /* Avoid the partial hack in TBAA that would consider memory tags if the program had no addressable symbols. */ f = 3; g = 2; p = foo () ? &g : &f; if (*p > 0.0) g = 1; /* Store into *locp and cache its current value. */ locp = malloc (sizeof (*locp)); locp->i = 10; T355 = locp->i; /* Take the address of one of locp's fields and write to it. */ T356 = &locp->i; *T356 = 1; /* Read the recently stored value. If TBAA fails, this will appear as a redundant load that will be replaced with '10'. */ T355 = locp->i; if (T355 != 1) abort (); return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -