brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.6 KiB · 3bf1631 Raw
65 lines · c
1// RUN: %clang_cc1 -ast-dump -std=c99 %s | FileCheck %s2 3void variadic(int i, ...);4 5void func(void) {6  // CHECK: FunctionDecl {{.*}} func 'void (void)'7 8  // Show that we correctly convert between two complex domains.9  _Complex float cf = 1.0f;10  _Complex double cd;11 12  cd = cf;13  // CHECK: BinaryOperator {{.*}} '_Complex double' '='14  // CHECK-NEXT: DeclRefExpr {{.*}} 'cd'15  // CHECK-NEXT: ImplicitCastExpr {{.*}} '_Complex double' <FloatingComplexCast>16  // CHECK-NEXT: ImplicitCastExpr {{.*}} '_Complex float' <LValueToRValue>17  // CHECK-NEXT: DeclRefExpr {{.*}} 'cf'18 19  cf = cd;20  // CHECK: BinaryOperator {{.*}} '_Complex float' '='21  // CHECK-NEXT: DeclRefExpr {{.*}} 'cf'22  // CHECK-NEXT: ImplicitCastExpr {{.*}} '_Complex float' <FloatingComplexCast>23  // CHECK-NEXT: ImplicitCastExpr {{.*}} '_Complex double' <LValueToRValue>24  // CHECK-NEXT: DeclRefExpr {{.*}} 'cd'25 26  // Show that we correctly convert to the common type of a complex and real.27  // This should convert the _Complex float to a _Complex double ("without28  // change of domain" c.f. C99 6.3.1.8p1).29  (void)(cf + 1.0);30  // CHECK: BinaryOperator {{.*}} '_Complex double' '+'31  // CHECK-NEXT: ImplicitCastExpr {{.*}} '_Complex double' <FloatingComplexCast>32  // CHECK-NEXT: ImplicitCastExpr {{.*}} '_Complex float' <LValueToRValue>33  // CHECK-NEXT: DeclRefExpr {{.*}} 'cf'34  // CHECK-NEXT: FloatingLiteral {{.*}} 'double' 1.035 36  // This should convert the float constant to double, then produce a37  // _Complex double.38  (void)(cd + 1.0f);39  // CHECK: BinaryOperator {{.*}} '_Complex double' '+'40  // CHECK-NEXT: ImplicitCastExpr {{.*}} '_Complex double' <LValueToRValue>41  // CHECK-NEXT: DeclRefExpr {{.*}} 'cd'42  // CHECK-NEXT: ImplicitCastExpr {{.*}} 'double' <FloatingCast>43  // CHECK-NEXT: FloatingLiteral {{.*}} 'float' 1.044 45  // This should convert the int constant to float, then produce a46  // _Complex float.47  (void)(cf + 1);48  // CHECK: BinaryOperator {{.*}} '_Complex float' '+'49  // CHECK-NEXT: ImplicitCastExpr {{.*}} '_Complex float' <LValueToRValue>50  // CHECK-NEXT: DeclRefExpr {{.*}} 'cf'51  // CHECK-NEXT: ImplicitCastExpr {{.*}} 'float' <IntegralToFloating>52  // CHECK-NEXT: IntegerLiteral {{.*}} 'int' 153 54  // Show that we do not promote a _Complex float to _Complex double as part of55  // the default argument promotions when passing to a variadic function.56  variadic(1, cf);57  // CHECK: CallExpr58  // CHECK-NEXT: ImplicitCastExpr {{.*}} <FunctionToPointerDecay>59  // CHECK-NEXT: DeclRefExpr {{.*}} 'variadic'60  // CHECK-NEXT: IntegerLiteral {{.*}} 'int' 161  // CHECK-NEXT: ImplicitCastExpr {{.*}} '_Complex float' <LValueToRValue>62  // CHECK-NEXT: DeclRefExpr {{.*}} 'cf'63}64 65