@@ -21,6 +21,9 @@ ShadowBytesToString(ArrayRef<uint8_t> ShadowBytes) {
21
21
case kAsanStackLeftRedzoneMagic : os << " L" ; break ;
22
22
case kAsanStackRightRedzoneMagic : os << " R" ; break ;
23
23
case kAsanStackMidRedzoneMagic : os << " M" ; break ;
24
+ case kAsanStackUseAfterScopeMagic :
25
+ os << " S" ;
26
+ break ;
24
27
default : os << (unsigned )ShadowBytes[i];
25
28
}
26
29
}
@@ -42,27 +45,28 @@ TEST(ASanStackFrameLayout, Test) {
42
45
#define VEC (a ) \
43
46
SmallVector<ASanStackVariableDescription, 10 >(a, a + sizeof (a) / sizeof (a[0 ]))
44
47
45
- #define VAR (name, size, alignment ) \
48
+ #define VAR (name, size, lifetime, alignment ) \
46
49
ASanStackVariableDescription name##size##_##alignment = { \
47
50
#name #size " _" #alignment, \
48
51
size, \
52
+ lifetime, \
49
53
alignment, \
50
54
0 , \
51
55
0 \
52
56
}
53
57
54
- VAR (a, 1 , 1 );
55
- VAR (p, 1 , 32 );
56
- VAR (p, 1 , 256 );
57
- VAR (a, 2 , 1 );
58
- VAR (a, 3 , 1 );
59
- VAR (a, 4 , 1 );
60
- VAR (a, 7 , 1 );
61
- VAR (a, 8 , 1 );
62
- VAR (a, 9 , 1 );
63
- VAR (a, 16 , 1 );
64
- VAR (a, 41 , 1 );
65
- VAR (a, 105 , 1 );
58
+ VAR (a, 1 , 0 , 1 );
59
+ VAR (p, 1 , 0 , 32 );
60
+ VAR (p, 1 , 0 , 256 );
61
+ VAR (a, 2 , 0 , 1 );
62
+ VAR (a, 3 , 0 , 1 );
63
+ VAR (a, 4 , 0 , 1 );
64
+ VAR (a, 7 , 0 , 1 );
65
+ VAR (a, 8 , 8 , 1 );
66
+ VAR (a, 9 , 0 , 1 );
67
+ VAR (a, 16 , 0 , 1 );
68
+ VAR (a, 41 , 9 , 1 );
69
+ VAR (a, 105 , 103 , 1 );
66
70
67
71
TestLayout (VEC1 (a1_1), 8 , 16 , " 1 16 1 4 a1_1" , " LL1R" );
68
72
TestLayout (VEC1 (a1_1), 64 , 64 , " 1 64 1 4 a1_1" , " L1" );
@@ -74,27 +78,25 @@ TEST(ASanStackFrameLayout, Test) {
74
78
TestLayout (VEC1 (a3_1), 8 , 32 , " 1 32 3 4 a3_1" , " LLLL3RRR" );
75
79
TestLayout (VEC1 (a4_1), 8 , 32 , " 1 32 4 4 a4_1" , " LLLL4RRR" );
76
80
TestLayout (VEC1 (a7_1), 8 , 32 , " 1 32 7 4 a7_1" , " LLLL7RRR" );
77
- TestLayout (VEC1 (a8_1), 8 , 32 , " 1 32 8 4 a8_1" , " LLLL0RRR " );
81
+ TestLayout (VEC1 (a8_1), 8 , 32 , " 1 32 8 4 a8_1" , " LLLLSRRR " );
78
82
TestLayout (VEC1 (a9_1), 8 , 32 , " 1 32 9 4 a9_1" , " LLLL01RR" );
79
83
TestLayout (VEC1 (a16_1), 8 , 32 , " 1 32 16 5 a16_1" , " LLLL00RR" );
80
84
TestLayout (VEC1 (p1_256), 8 , 32 , " 1 256 1 6 p1_256" ,
81
85
" LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL1RRR" );
82
- TestLayout (VEC1 (a41_1), 8 , 32 , " 1 32 41 5 a41_1" , " LLLL000001RRRRRR " );
86
+ TestLayout (VEC1 (a41_1), 8 , 32 , " 1 32 41 5 a41_1" , " LLLLSS0001RRRRRR " );
83
87
TestLayout (VEC1 (a105_1), 8 , 32 , " 1 32 105 6 a105_1" ,
84
- " LLLL00000000000001RRRRRR " );
88
+ " LLLLSSSSSSSSSSSSS1RRRRRR " );
85
89
86
90
{
87
91
ASanStackVariableDescription t[] = {a1_1, p1_256};
88
- TestLayout (VEC (t), 8 , 32 ,
89
- " 2 256 1 6 p1_256 272 1 4 a1_1" ,
90
- " LLLLLLLL" " LLLLLLLL" " LLLLLLLL" " LLLLLLLL" " 1M1R" );
92
+ TestLayout (VEC (t), 8 , 32 , " 2 256 1 6 p1_256 272 1 4 a1_1" ,
93
+ " LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL1M1R" );
91
94
}
92
95
93
96
{
94
97
ASanStackVariableDescription t[] = {a1_1, a16_1, a41_1};
95
- TestLayout (VEC (t), 8 , 32 ,
96
- " 3 32 1 4 a1_1 48 16 5 a16_1 80 41 5 a41_1" ,
97
- " LLLL" " 1M00" " MM00" " 0001" " RRRR" );
98
+ TestLayout (VEC (t), 8 , 32 , " 3 32 1 4 a1_1 48 16 5 a16_1 80 41 5 a41_1" ,
99
+ " LLLL1M00MMSS0001RRRR" );
98
100
}
99
101
#undef VEC1
100
102
#undef VEC
0 commit comments