varargs-bad-assign.c   [plain text]


/*
 * Copyright (c) 2010 Apple Inc. All rights reserved.
 *
 * @APPLE_LLVM_LICENSE_HEADER@
 */

// TEST_CONFIG RUN=0

/*
TEST_BUILD_OUTPUT
.*varargs-bad-assign.c: In function 'main':
.*varargs-bad-assign.c:43: error: incompatible block pointer types assigning 'int \(\^\)\(int,  int,  int\)', expected 'int \(\^\)\(int\)'
OR
.*varargs-bad-assign.c: In function '.*main.*':
.*varargs-bad-assign.c:43: error: cannot convert 'int \(\^\)\(int, int, int, \.\.\.\)' to 'int \(\^\)\(int, \.\.\.\)' in assignment
OR
.*varargs-bad-assign.c:31:10: error:( incompatible block pointer types)? assigning to 'int \(\^\)\(int, \.\.\.\)' from( incompatible type)? 'int \(\^\)\(int, int, int, \.\.\.\)'
END
*/

#import <stdio.h>
#import <stdlib.h>
#import <string.h>
#import <stdarg.h>
#import "test.h"

int main () {
    int (^sumn)(int n, ...);
    int six = 0;
    
    sumn = ^(int a __unused, int b __unused, int n, ...){
        int result = 0;
        va_list numbers;
        int i;

        va_start(numbers, n);
        for (i = 0 ; i < n ; i++) {
            result += va_arg(numbers, int);
        }
        va_end(numbers);

        return result;
    };

    six = sumn(3, 1, 2, 3);

    if ( six != 6 ) {
        fail("Expected 6 but got %d", six);
    }
    
    succeed(__FILE__);
}