| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,13 @@ | ||
| // RUN: %clang_cc1 -fexperimental-new-constant-interpreter -verify=both,expected -std=c++11 -triple x86_64-linux -pedantic %s | ||
| // RUN: %clang_cc1 -verify=both,ref -std=c++11 -triple x86_64-linux -pedantic %s | ||
|
|
||
| struct T { int n; }; | ||
| const T t = { 42 }; // both-note 2{{declared here}} | ||
| struct S { | ||
| int m : t.n; // both-warning {{width of bit-field 'm' (42 bits)}} \ | ||
| // both-warning {{expression is not an integral constant expression}} \ | ||
| // both-note {{read of non-constexpr variable 't' is not allowed}} | ||
| }; | ||
|
|
||
| static_assert(t.n == 42, ""); // both-error {{expression is not an integral constant expression}} \ | ||
| // both-note {{read of non-constexpr variable 't' is not allowed}} |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,41 @@ | ||
| // RUN: rm -rf %t | ||
| // RUN: mkdir -p %t | ||
| // RUN: split-file %s %t | ||
| // | ||
| // RUN: %clang_cc1 -std=c++23 %t/a.cppm -emit-module-interface -o %t/a.pcm | ||
| // RUN: %clang_cc1 -std=c++23 %t/b.cppm -emit-module-interface -o %t/b.pcm \ | ||
| // RUN: -fprebuilt-module-path=%t | ||
| // RUN: %clang_cc1 -std=c++23 -fprebuilt-module-path=%t %t/b.pcm -emit-llvm \ | ||
| // RUN: -disable-llvm-passes -o - | FileCheck %t/b.cppm | ||
|
|
||
| //--- a.cppm | ||
| module; | ||
|
|
||
| struct base { | ||
| virtual void f() const; | ||
| }; | ||
|
|
||
| inline void base::f() const { | ||
| } | ||
|
|
||
| export module a; | ||
| export using ::base; | ||
|
|
||
| //--- b.cppm | ||
| module; | ||
|
|
||
| struct base { | ||
| virtual void f() const; | ||
| }; | ||
|
|
||
| inline void base::f() const { | ||
| } | ||
|
|
||
| export module b; | ||
| import a; | ||
| export using ::base; | ||
|
|
||
| export extern "C" void func() {} | ||
|
|
||
| // We only need to check that the IR are successfully emitted instead of crash. | ||
| // CHECK: func |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,4 +1,3 @@ | ||
| ! RUN: %python %S/test_folding.py %s %flang_fc1 | ||
| ! Test numeric model inquiry intrinsics | ||
|
|
||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,4 +1,3 @@ | ||
| ! RUN: bbc -emit-fir -o - %s | FileCheck %s | ||
|
|
||
| ! CHECK-LABEL: func @_QQmain | ||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,4 +1,3 @@ | ||
| ! RUN: bbc -emit-fir -hlfir=false -o - %s | FileCheck %s | ||
|
|
||
| ! CHECK-LABEL: func @_QQmain | ||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,100 @@ | ||
| ! This test checks lowering of OpenMP DISTRIBUTE PARALLEL DO SIMD composite | ||
| ! constructs. | ||
|
|
||
| ! RUN: bbc -fopenmp -emit-hlfir %s -o - | FileCheck %s | ||
| ! RUN: %flang_fc1 -fopenmp -emit-hlfir %s -o - | FileCheck %s | ||
|
|
||
| ! CHECK-LABEL: func.func @_QPdistribute_parallel_do_simd_num_threads( | ||
| subroutine distribute_parallel_do_simd_num_threads() | ||
| !$omp teams | ||
|
|
||
| ! CHECK: omp.parallel num_threads({{.*}}) private({{.*}}) { | ||
| ! CHECK: omp.distribute { | ||
| ! CHECK-NEXT: omp.wsloop { | ||
| ! CHECK-NEXT: omp.simd { | ||
| ! CHECK-NEXT: omp.loop_nest | ||
| !$omp distribute parallel do simd num_threads(10) | ||
| do index_ = 1, 10 | ||
| end do | ||
| !$omp end distribute parallel do simd | ||
|
|
||
| !$omp end teams | ||
| end subroutine distribute_parallel_do_simd_num_threads | ||
|
|
||
| ! CHECK-LABEL: func.func @_QPdistribute_parallel_do_simd_dist_schedule( | ||
| subroutine distribute_parallel_do_simd_dist_schedule() | ||
| !$omp teams | ||
|
|
||
| ! CHECK: omp.parallel private({{.*}}) { | ||
| ! CHECK: omp.distribute dist_schedule_static dist_schedule_chunk_size({{.*}}) { | ||
| ! CHECK-NEXT: omp.wsloop { | ||
| ! CHECK-NEXT: omp.simd { | ||
| ! CHECK-NEXT: omp.loop_nest | ||
| !$omp distribute parallel do simd dist_schedule(static, 4) | ||
| do index_ = 1, 10 | ||
| end do | ||
| !$omp end distribute parallel do simd | ||
|
|
||
| !$omp end teams | ||
| end subroutine distribute_parallel_do_simd_dist_schedule | ||
|
|
||
| ! CHECK-LABEL: func.func @_QPdistribute_parallel_do_simd_schedule( | ||
| subroutine distribute_parallel_do_simd_schedule() | ||
| !$omp teams | ||
|
|
||
| ! CHECK: omp.parallel private({{.*}}) { | ||
| ! CHECK: omp.distribute { | ||
| ! CHECK-NEXT: omp.wsloop schedule(static = {{.*}}) { | ||
| ! CHECK-NEXT: omp.simd { | ||
| ! CHECK-NEXT: omp.loop_nest | ||
| !$omp distribute parallel do simd schedule(static, 4) | ||
| do index_ = 1, 10 | ||
| end do | ||
| !$omp end distribute parallel do simd | ||
|
|
||
| !$omp end teams | ||
| end subroutine distribute_parallel_do_simd_schedule | ||
|
|
||
| ! CHECK-LABEL: func.func @_QPdistribute_parallel_do_simd_simdlen( | ||
| subroutine distribute_parallel_do_simd_simdlen() | ||
| !$omp teams | ||
|
|
||
| ! CHECK: omp.parallel private({{.*}}) { | ||
| ! CHECK: omp.distribute { | ||
| ! CHECK-NEXT: omp.wsloop { | ||
| ! CHECK-NEXT: omp.simd simdlen(4) { | ||
| ! CHECK-NEXT: omp.loop_nest | ||
| !$omp distribute parallel do simd simdlen(4) | ||
| do index_ = 1, 10 | ||
| end do | ||
| !$omp end distribute parallel do simd | ||
|
|
||
| !$omp end teams | ||
| end subroutine distribute_parallel_do_simd_simdlen | ||
|
|
||
| ! CHECK-LABEL: func.func @_QPdistribute_parallel_do_simd_private( | ||
| subroutine distribute_parallel_do_simd_private() | ||
| ! CHECK: %[[INDEX_ALLOC:.*]] = fir.alloca i32 | ||
| ! CHECK: %[[INDEX:.*]]:2 = hlfir.declare %[[INDEX_ALLOC]] | ||
| ! CHECK: %[[X_ALLOC:.*]] = fir.alloca i64 | ||
| ! CHECK: %[[X:.*]]:2 = hlfir.declare %[[X_ALLOC]] | ||
| integer(8) :: x | ||
|
|
||
| ! CHECK: omp.teams { | ||
| !$omp teams | ||
|
|
||
| ! CHECK: omp.parallel private(@{{.*}} %[[X]]#0 -> %[[X_ARG:.*]] : !fir.ref<i64>, | ||
| ! CHECK-SAME: @{{.*}} %[[INDEX]]#0 -> %[[INDEX_ARG:.*]] : !fir.ref<i32>) { | ||
| ! CHECK: %[[X_PRIV:.*]]:2 = hlfir.declare %[[X_ARG]] | ||
| ! CHECK: %[[INDEX_PRIV:.*]]:2 = hlfir.declare %[[INDEX_ARG]] | ||
| ! CHECK: omp.distribute { | ||
| ! CHECK-NEXT: omp.wsloop { | ||
| ! CHECK-NEXT: omp.simd { | ||
| ! CHECK-NEXT: omp.loop_nest | ||
| !$omp distribute parallel do simd private(x) | ||
| do index_ = 1, 10 | ||
| end do | ||
| !$omp end distribute parallel do simd | ||
|
|
||
| !$omp end teams | ||
| end subroutine distribute_parallel_do_simd_private |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,79 @@ | ||
| ! This test checks lowering of OpenMP DISTRIBUTE PARALLEL DO composite | ||
| ! constructs. | ||
|
|
||
| ! RUN: bbc -fopenmp -emit-hlfir %s -o - | FileCheck %s | ||
| ! RUN: %flang_fc1 -fopenmp -emit-hlfir %s -o - | FileCheck %s | ||
|
|
||
| ! CHECK-LABEL: func.func @_QPdistribute_parallel_do_num_threads( | ||
| subroutine distribute_parallel_do_num_threads() | ||
| !$omp teams | ||
|
|
||
| ! CHECK: omp.parallel num_threads({{.*}}) private({{.*}}) { | ||
| ! CHECK: omp.distribute { | ||
| ! CHECK-NEXT: omp.wsloop { | ||
| ! CHECK-NEXT: omp.loop_nest | ||
| !$omp distribute parallel do num_threads(10) | ||
| do index_ = 1, 10 | ||
| end do | ||
| !$omp end distribute parallel do | ||
|
|
||
| !$omp end teams | ||
| end subroutine distribute_parallel_do_num_threads | ||
|
|
||
| ! CHECK-LABEL: func.func @_QPdistribute_parallel_do_dist_schedule( | ||
| subroutine distribute_parallel_do_dist_schedule() | ||
| !$omp teams | ||
|
|
||
| ! CHECK: omp.parallel private({{.*}}) { | ||
| ! CHECK: omp.distribute dist_schedule_static dist_schedule_chunk_size({{.*}}) { | ||
| ! CHECK-NEXT: omp.wsloop { | ||
| ! CHECK-NEXT: omp.loop_nest | ||
| !$omp distribute parallel do dist_schedule(static, 4) | ||
| do index_ = 1, 10 | ||
| end do | ||
| !$omp end distribute parallel do | ||
|
|
||
| !$omp end teams | ||
| end subroutine distribute_parallel_do_dist_schedule | ||
|
|
||
| ! CHECK-LABEL: func.func @_QPdistribute_parallel_do_ordered( | ||
| subroutine distribute_parallel_do_ordered() | ||
| !$omp teams | ||
|
|
||
| ! CHECK: omp.parallel private({{.*}}) { | ||
| ! CHECK: omp.distribute { | ||
| ! CHECK-NEXT: omp.wsloop ordered(1) { | ||
| ! CHECK-NEXT: omp.loop_nest | ||
| !$omp distribute parallel do ordered(1) | ||
| do index_ = 1, 10 | ||
| end do | ||
| !$omp end distribute parallel do | ||
|
|
||
| !$omp end teams | ||
| end subroutine distribute_parallel_do_ordered | ||
|
|
||
| ! CHECK-LABEL: func.func @_QPdistribute_parallel_do_private( | ||
| subroutine distribute_parallel_do_private() | ||
| ! CHECK: %[[INDEX_ALLOC:.*]] = fir.alloca i32 | ||
| ! CHECK: %[[INDEX:.*]]:2 = hlfir.declare %[[INDEX_ALLOC]] | ||
| ! CHECK: %[[X_ALLOC:.*]] = fir.alloca i64 | ||
| ! CHECK: %[[X:.*]]:2 = hlfir.declare %[[X_ALLOC]] | ||
| integer(8) :: x | ||
|
|
||
| ! CHECK: omp.teams { | ||
| !$omp teams | ||
|
|
||
| ! CHECK: omp.parallel private(@{{.*}} %[[X]]#0 -> %[[X_ARG:.*]] : !fir.ref<i64>, | ||
| ! CHECK-SAME: @{{.*}} %[[INDEX]]#0 -> %[[INDEX_ARG:.*]] : !fir.ref<i32>) { | ||
| ! CHECK: %[[X_PRIV:.*]]:2 = hlfir.declare %[[X_ARG]] | ||
| ! CHECK: %[[INDEX_PRIV:.*]]:2 = hlfir.declare %[[INDEX_ARG]] | ||
| ! CHECK: omp.distribute { | ||
| ! CHECK-NEXT: omp.wsloop { | ||
| ! CHECK-NEXT: omp.loop_nest | ||
| !$omp distribute parallel do private(x) | ||
| do index_ = 1, 10 | ||
| end do | ||
| !$omp end distribute parallel do | ||
|
|
||
| !$omp end teams | ||
| end subroutine distribute_parallel_do_private |