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