// RUN: %clang_cc1 -ast-dump -std=c99 %s | FileCheck %s void variadic(int i, ...); void func(void) { // CHECK: FunctionDecl {{.*}} func 'void (void)' // Show that we correctly convert between two complex domains. _Complex float cf = 1.0f; _Complex double cd; cd = cf; // CHECK: BinaryOperator {{.*}} '_Complex double' '=' // CHECK-NEXT: DeclRefExpr {{.*}} 'cd' // CHECK-NEXT: ImplicitCastExpr {{.*}} '_Complex double' // CHECK-NEXT: ImplicitCastExpr {{.*}} '_Complex float' // CHECK-NEXT: DeclRefExpr {{.*}} 'cf' cf = cd; // CHECK: BinaryOperator {{.*}} '_Complex float' '=' // CHECK-NEXT: DeclRefExpr {{.*}} 'cf' // CHECK-NEXT: ImplicitCastExpr {{.*}} '_Complex float' // CHECK-NEXT: ImplicitCastExpr {{.*}} '_Complex double' // CHECK-NEXT: DeclRefExpr {{.*}} 'cd' // Show that we correctly convert to the common type of a complex and real. // This should convert the _Complex float to a _Complex double ("without // change of domain" c.f. C99 6.3.1.8p1). (void)(cf + 1.0); // CHECK: BinaryOperator {{.*}} '_Complex double' '+' // CHECK-NEXT: ImplicitCastExpr {{.*}} '_Complex double' // CHECK-NEXT: ImplicitCastExpr {{.*}} '_Complex float' // CHECK-NEXT: DeclRefExpr {{.*}} 'cf' // CHECK-NEXT: FloatingLiteral {{.*}} 'double' 1.0 // This should convert the float constant to double, then produce a // _Complex double. (void)(cd + 1.0f); // CHECK: BinaryOperator {{.*}} '_Complex double' '+' // CHECK-NEXT: ImplicitCastExpr {{.*}} '_Complex double' // CHECK-NEXT: DeclRefExpr {{.*}} 'cd' // CHECK-NEXT: ImplicitCastExpr {{.*}} 'double' // CHECK-NEXT: FloatingLiteral {{.*}} 'float' 1.0 // This should convert the int constant to float, then produce a // _Complex float. (void)(cf + 1); // CHECK: BinaryOperator {{.*}} '_Complex float' '+' // CHECK-NEXT: ImplicitCastExpr {{.*}} '_Complex float' // CHECK-NEXT: DeclRefExpr {{.*}} 'cf' // CHECK-NEXT: ImplicitCastExpr {{.*}} 'float' // CHECK-NEXT: IntegerLiteral {{.*}} 'int' 1 // Show that we do not promote a _Complex float to _Complex double as part of // the default argument promotions when passing to a variadic function. variadic(1, cf); // CHECK: CallExpr // CHECK-NEXT: ImplicitCastExpr {{.*}} // CHECK-NEXT: DeclRefExpr {{.*}} 'variadic' // CHECK-NEXT: IntegerLiteral {{.*}} 'int' 1 // CHECK-NEXT: ImplicitCastExpr {{.*}} '_Complex float' // CHECK-NEXT: DeclRefExpr {{.*}} 'cf' }