brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.7 KiB · c9b6466 Raw
90 lines · c
1// RUN: %clang_cc1 -ast-dump -verify -x c %s | FileCheck -check-prefix=CHECK-C %s2// RUN: %clang_cc1 -ast-dump -x c++ -std=c++11 %s | FileCheck %s --check-prefixes CHECK-C,CHECK-CPP3 4// expected-no-diagnostics5 6void bar(int);7// CHECK-C: FunctionDecl{{.*}}code_align 'void ()'8void code_align() {9  int a1[10], a2[10];10  // CHECK-C: AttributedStmt11  // CHECK-C-NEXT: CodeAlignAttr12  // CHECK-C-NEXT:  ConstantExpr{{.*}}'int'13  // CHECK-C-NEXT:  value: Int 1614  // CHECK-C-NEXT:  IntegerLiteral{{.*}}16{{$}}15  [[clang::code_align(16)]] for (int p = 0; p < 128; ++p) {16    a1[p] = a2[p] = 0;17  }18 19  // CHECK-C: AttributedStmt20  // CHECK-C-NEXT:  CodeAlignAttr21  // CHECK-C-NEXT:  ConstantExpr{{.*}}'int'22  // CHECK-C-NEXT:  value: Int 423  // CHECK-C-NEXT:  IntegerLiteral{{.*}}4{{$}}24  int i = 0;25  [[clang::code_align(4)]] while (i < 30) {26    a1[i] += 3;27  }28 29  // CHECK-C: AttributedStmt30  // CHECK-C-NEXT:  CodeAlignAttr31  // CHECK-C-NEXT:  ConstantExpr{{.*}}'int'32  // CHECK-C-NEXT:  value: Int 3233  // CHECK-C-NEXT:  IntegerLiteral{{.*}}32{{$}}34  for (int i = 0; i < 128; ++i) {35    [[clang::code_align(32)]]  for (int j = 0; j < 128; ++j) {36      a1[i] += a1[j];37    }38  }39 40  // CHECK-C: AttributedStmt41  // CHECK-C-NEXT:  CodeAlignAttr42  // CHECK-C-NEXT:  ConstantExpr{{.*}}'int'43  // CHECK-C-NEXT:  value: Int 6444  // CHECK-C-NEXT:  IntegerLiteral{{.*}}64{{$}}45  [[clang::code_align(64)]]46  for(int I=0; I<128; ++I) { bar(I); }47 48  // CHECK-C: AttributedStmt49  // CHECK-C-NEXT: CodeAlignAttr50  // CHECK-C-NEXT:  ConstantExpr{{.*}}'int'51  // CHECK-C-NEXT:  value: Int 452  // CHECK-C-NEXT:  IntegerLiteral{{.*}}4{{$}}53  int b = 10;54  [[clang::code_align(4)]] do {55    b = b + 1;56  } while (b < 20);57}58 59#if __cplusplus >= 201103L60//CHECK-CPP: FunctionDecl{{.*}}used code_align_cpp 'void ()' implicit_instantiation61template <int A, int B>62void code_align_cpp() {63  int a[10];64  // CHECK-CPP: AttributedStmt65  // CHECK-CPP-NEXT:  CodeAlignAttr66  // CHECK-CPP-NEXT:  ConstantExpr{{.*}}'int'67  // CHECK-CPP-NEXT:  value: Int 3268  // CHECK-CPP-NEXT:  SubstNonTypeTemplateParmExpr{{.*}}'int'69  // CHECK-CPP-NEXT:  NonTypeTemplateParmDecl{{.*}}referenced 'int' depth 0 index 0 A70  // CHECK-CPP-NEXT:  IntegerLiteral{{.*}}32{{$}}71  [[clang::code_align(A)]] for (int i = 0; i != 10; ++i)72    a[i] = 0;73 74  // CHECK-CPP: AttributedStmt75  // CHECK-CPP-NEXT:  CodeAlignAttr76  // CHECK-CPP-NEXT:  ConstantExpr{{.*}}'int'77  // CHECK-CPP-NEXT:  value: Int 478  // CHECK-CPP-NEXT:  SubstNonTypeTemplateParmExpr{{.*}}'int'79  // CHECK-CPP-NEXT:  NonTypeTemplateParmDecl{{.*}}referenced 'int' depth 0 index 1 B80  // CHECK-CPP-NEXT:  IntegerLiteral{{.*}}4{{$}}81  int c[] = {0, 1, 2, 3, 4, 5};82  [[clang::code_align(B)]] for (int n : c) { n *= 2; }83}84 85int main() {86  code_align_cpp<32, 4>();87  return 0;88}89#endif90