186d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst//
286d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst//                     The LLVM Compiler Infrastructure
386d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst//
486d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst// This file is distributed under the University of Illinois Open Source
586d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst// License. See LICENSE.TXT for details.
686d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst
786d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst//  -*- mode:C; c-basic-offset:4; tab-width:4; intent-tabs-mode:nil;  -*-
886d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst// HACK ALERT: gcc and g++ give different errors, referencing the line number to ensure that it checks for the right error; MUST KEEP IN SYNC WITH THE TEST
986d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst// CONFIG 27: error:
1086d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst
1186d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst#import <stdio.h>
1286d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst#import <stdlib.h>
1386d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst#import <string.h>
1486d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst#import <stdarg.h>
1586d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst
1686d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst
1786d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garstint main (int argc, const char * argv[]) {
1886d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst    int (^sumn)(int n, ...);
1986d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst    int six = 0;
2086d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst
2186d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst    sumn = ^(int a, int b, int n, ...){
2286d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst        int result = 0;
2386d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst        va_list numbers;
2486d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst        int i;
2586d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst
2686d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst        va_start(numbers, n);
2786d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst        for (i = 0 ; i < n ; i++) {
2886d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst            result += va_arg(numbers, int);
2986d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst        }
3086d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst        va_end(numbers);
3186d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst
3286d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst        return result;
3386d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst    };
3486d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst
3586d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst    six = sumn(3, 1, 2, 3);
3686d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst
3786d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst    if ( six != 6 ) {
3886d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst        printf("%s: Expected 6 but got %d\n", argv[0], six);
3986d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst        exit(1);
4086d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst    }
4186d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst
4286d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst    printf("%s: success\n", argv[0]);
4386d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst    return 0;
4486d0ba4286ec42dcd055bd22434c7f40009834bdBlaine Garst}
45