llvm-project

Форк
0
44 строки · 1.1 Кб
1
//
2
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
3
// See https://llvm.org/LICENSE.txt for license information.
4
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
5

6
//  -*- mode:C; c-basic-offset:4; tab-width:4; intent-tabs-mode:nil;  -*-
7
// CONFIG
8

9
#import <stdio.h>
10
#import <stdlib.h>
11
#import <string.h>
12

13
typedef struct {
14
  int a;
15
  int b;
16
} MiniStruct;
17

18
int main (int argc, const char * argv[]) {
19
    MiniStruct inny;
20
    MiniStruct outty;
21
    MiniStruct (^copyStruct)(MiniStruct);
22
    
23
    memset(&inny, 0xA5, sizeof(inny));
24
    memset(&outty, 0x2A, sizeof(outty));    
25
    
26
    inny.a = 12;
27
    inny.b = 42;
28

29
    copyStruct = ^(MiniStruct aTinyStruct){ return aTinyStruct; };  // pass-by-value intrinsically copies the argument
30
    
31
    outty = copyStruct(inny);
32

33
    if ( &inny == &outty ) {
34
        printf("%s: struct wasn't copied.", argv[0]);
35
        exit(1);
36
    }
37
    if ( (inny.a != outty.a) || (inny.b != outty.b) ) {
38
        printf("%s: struct contents did not match.", argv[0]);
39
        exit(1);
40
    }
41
    
42
    printf("%s: success\n", argv[0]);
43
    return 0;
44
}
45

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.