File tree 2 files changed +24
-3
lines changed
2 files changed +24
-3
lines changed Original file line number Diff line number Diff line change @@ -112,9 +112,10 @@ fn classify_ty(ty: TypeRef) -> ~[x86_64_reg_class] {
112
112
Float => 4 ,
113
113
Double => 8 ,
114
114
Struct => {
115
- do vec:: foldl ( 0 , struct_tys ( ty) ) |s, t| {
116
- s + ty_size ( * t)
117
- }
115
+ let size = do vec:: foldl ( 0 , struct_tys ( ty) ) |s, t| {
116
+ align ( s, * t) + ty_size ( * t)
117
+ } ;
118
+ align ( size, ty)
118
119
}
119
120
Array => {
120
121
let len = llvm:: LLVMGetArrayLength ( ty) as uint ;
Original file line number Diff line number Diff line change
1
+ // Issue #3656
2
+ // Incorrect struct size computation in the FFI, because of not taking
3
+ // the alignment of elements into account.
4
+
5
+ use libc:: * ;
6
+
7
+ struct KEYGEN {
8
+ hash_algorithm : [ c_uint ] /2 ,
9
+ count : uint32_t ,
10
+ salt : * c_void ,
11
+ salt_size : uint32_t ,
12
+ }
13
+
14
+ extern {
15
+ // Bogus signature, just need to test if it compiles.
16
+ pub fn malloc ( ++data : KEYGEN ) ;
17
+ }
18
+
19
+ fn main ( ) {
20
+ }
You can’t perform that action at this time.
0 commit comments