File tree Expand file tree Collapse file tree 2 files changed +24
-3
lines changed Expand file tree Collapse file tree 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] {
112112 Float => 4 ,
113113 Double => 8 ,
114114 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)
118119 }
119120 Array => {
120121 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