CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
140 lines
6.0 KiB
C++
140 lines
6.0 KiB
C++
// RUN: %clang_cc1 -std=c++17 -Wno-unused -ast-dump %s -ast-dump-filter Test | FileCheck %s
|
|
|
|
namespace Test {
|
|
template<typename T, typename U>
|
|
void Unary(T t, T* pt, T U::* mpt, T(&ft)(), T(&at)[4]) {
|
|
// CHECK: UnaryOperator {{.*}} '<dependent type>' lvalue prefix '*' cannot overflow
|
|
// CHECK-NEXT: DeclRefExpr {{.*}} 'T' lvalue ParmVar {{.*}} 't' 'T'
|
|
*t;
|
|
|
|
// CHECK: UnaryOperator {{.*}} '<dependent type>' prefix '+' cannot overflow
|
|
// CHECK-NEXT: DeclRefExpr {{.*}} 'T' lvalue ParmVar {{.*}} 't' 'T'
|
|
+t;
|
|
|
|
// CHECK: UnaryOperator {{.*}} '<dependent type>' prefix '-' cannot overflow
|
|
// CHECK-NEXT: DeclRefExpr {{.*}} 'T' lvalue ParmVar {{.*}} 't' 'T'
|
|
-t;
|
|
|
|
// CHECK: UnaryOperator {{.*}} '<dependent type>' prefix '!' cannot overflow
|
|
// CHECK-NEXT: DeclRefExpr {{.*}} 'T' lvalue ParmVar {{.*}} 't' 'T'
|
|
!t;
|
|
|
|
// CHECK: UnaryOperator {{.*}} '<dependent type>' prefix '~' cannot overflow
|
|
// CHECK-NEXT: DeclRefExpr {{.*}} 'T' lvalue ParmVar {{.*}} 't' 'T'
|
|
~t;
|
|
|
|
// CHECK: UnaryOperator {{.*}} '<dependent type>' prefix '&' cannot overflow
|
|
// CHECK-NEXT: DeclRefExpr {{.*}} 'T' lvalue ParmVar {{.*}} 't' 'T'
|
|
&t;
|
|
|
|
// CHECK: UnaryOperator {{.*}} '<dependent type>' lvalue prefix '++' cannot overflow
|
|
// CHECK-NEXT: DeclRefExpr {{.*}} 'T' lvalue ParmVar {{.*}} 't' 'T'
|
|
++t;
|
|
|
|
// CHECK: UnaryOperator {{.*}} '<dependent type>' lvalue prefix '--' cannot overflow
|
|
// CHECK-NEXT: DeclRefExpr {{.*}} 'T' lvalue ParmVar {{.*}} 't' 'T'
|
|
--t;
|
|
|
|
// CHECK: UnaryOperator {{.*}} 'T' lvalue prefix '*' cannot overflow
|
|
// CHECK-NEXT: ImplicitCastExpr {{.*}} 'T *' <LValueToRValue>
|
|
// CHECK-NEXT: DeclRefExpr {{.*}} 'T *' lvalue ParmVar {{.*}} 'pt' 'T *'
|
|
*pt;
|
|
|
|
// CHECK: UnaryOperator {{.*}} 'T *' prefix '+' cannot overflow
|
|
// CHECK-NEXT: ImplicitCastExpr {{.*}} 'T *' <LValueToRValue>
|
|
// CHECK-NEXT: DeclRefExpr {{.*}} 'T *' lvalue ParmVar {{.*}} 'pt' 'T *'
|
|
+pt;
|
|
|
|
// CHECK: UnaryOperator {{.*}} 'bool' prefix '!' cannot overflow
|
|
// CHECK-NEXT: ImplicitCastExpr {{.*}} 'bool' <PointerToBoolean>
|
|
// CHECK-NEXT: ImplicitCastExpr {{.*}} 'T *' <LValueToRValue>
|
|
// CHECK-NEXT: DeclRefExpr {{.*}} 'T *' lvalue ParmVar {{.*}} 'pt' 'T *'
|
|
!pt;
|
|
|
|
// CHECK: UnaryOperator {{.*}} '<dependent type>' prefix '&' cannot overflow
|
|
// CHECK-NEXT: DeclRefExpr {{.*}} 'T *' lvalue ParmVar {{.*}} 'pt' 'T *'
|
|
&pt;
|
|
|
|
// CHECK: UnaryOperator {{.*}} 'T *' lvalue prefix '++' cannot overflow
|
|
// CHECK-NEXT: DeclRefExpr {{.*}} 'T *' lvalue ParmVar {{.*}} 'pt' 'T *'
|
|
++pt;
|
|
|
|
// CHECK: UnaryOperator {{.*}} 'T *' lvalue prefix '--' cannot overflow
|
|
// CHECK-NEXT: DeclRefExpr {{.*}} 'T *' lvalue ParmVar {{.*}} 'pt' 'T *'
|
|
--pt;
|
|
|
|
// CHECK: UnaryOperator {{.*}} 'bool' prefix '!' cannot overflow
|
|
// CHECK-NEXT: ImplicitCastExpr {{.*}} 'bool' <MemberPointerToBoolean>
|
|
// CHECK-NEXT: ImplicitCastExpr {{.*}} 'T U::*' <LValueToRValue>
|
|
// CHECK-NEXT: DeclRefExpr {{.*}} 'T U::*' lvalue ParmVar {{.*}} 'mpt' 'T U::*'
|
|
!mpt;
|
|
|
|
// CHECK: UnaryOperator {{.*}} '<dependent type>' prefix '&' cannot overflow
|
|
// CHECK-NEXT: DeclRefExpr {{.*}} 'T U::*' lvalue ParmVar {{.*}} 'mpt' 'T U::*'
|
|
&mpt;
|
|
|
|
// CHECK: UnaryOperator {{.*}} 'T ()' lvalue prefix '*' cannot overflow
|
|
// CHECK-NEXT: ImplicitCastExpr {{.*}} 'T (*)()' <FunctionToPointerDecay>
|
|
// CHECK-NEXT: DeclRefExpr {{.*}} 'T ()' lvalue ParmVar {{.*}} 'ft' 'T (&)()'
|
|
*ft;
|
|
|
|
// CHECK: UnaryOperator {{.*}} 'T (*)()' prefix '+' cannot overflow
|
|
// CHECK-NEXT: ImplicitCastExpr {{.*}} 'T (*)()' <FunctionToPointerDecay>
|
|
// CHECK-NEXT: DeclRefExpr {{.*}} 'T ()' lvalue ParmVar {{.*}} 'ft' 'T (&)()'
|
|
+ft;
|
|
|
|
// CHECK: UnaryOperator {{.*}} 'bool' prefix '!' cannot overflow
|
|
// CHECK-NEXT: ImplicitCastExpr {{.*}} 'bool' <PointerToBoolean>
|
|
// CHECK-NEXT: ImplicitCastExpr {{.*}} 'T (*)()' <FunctionToPointerDecay>
|
|
// CHECK-NEXT: DeclRefExpr {{.*}} 'T ()' lvalue ParmVar {{.*}} 'ft' 'T (&)()'
|
|
!ft;
|
|
|
|
// CHECK: UnaryOperator {{.*}} '<dependent type>' prefix '&' cannot overflow
|
|
// CHECK-NEXT: DeclRefExpr {{.*}} 'T ()' lvalue ParmVar {{.*}} 'ft' 'T (&)()'
|
|
&ft;
|
|
|
|
// CHECK: UnaryOperator {{.*}} 'T' lvalue prefix '*' cannot overflow
|
|
// CHECK-NEXT: ImplicitCastExpr {{.*}} 'T *' <ArrayToPointerDecay>
|
|
// CHECK-NEXT: DeclRefExpr {{.*}} 'T[4]' lvalue ParmVar {{.*}} 'at' 'T (&)[4]'
|
|
*at;
|
|
|
|
// CHECK: UnaryOperator {{.*}} 'T *' prefix '+' cannot overflow
|
|
// CHECK-NEXT: ImplicitCastExpr {{.*}} 'T *' <ArrayToPointerDecay>
|
|
// CHECK-NEXT: DeclRefExpr {{.*}} 'T[4]' lvalue ParmVar {{.*}} 'at' 'T (&)[4]'
|
|
+at;
|
|
|
|
// CHECK: UnaryOperator {{.*}} 'bool' prefix '!' cannot overflow
|
|
// CHECK-NEXT: ImplicitCastExpr {{.*}} 'bool' <PointerToBoolean>
|
|
// CHECK-NEXT: ImplicitCastExpr {{.*}} 'T *' <ArrayToPointerDecay>
|
|
// CHECK-NEXT: DeclRefExpr {{.*}} 'T[4]' lvalue ParmVar {{.*}} 'at' 'T (&)[4]'
|
|
!at;
|
|
|
|
// CHECK: UnaryOperator {{.*}} '<dependent type>' prefix '&' cannot overflow
|
|
// CHECK-NEXT: DeclRefExpr {{.*}} 'T[4]' lvalue ParmVar {{.*}} 'at' 'T (&)[4]'
|
|
&at;
|
|
}
|
|
|
|
template<typename T, typename U>
|
|
void Binary(T* pt, U* pu) {
|
|
// CHECK: BinaryOperator {{.*}} '<dependent type>' '+'
|
|
// CHECK-NEXT: DeclRefExpr {{.*}} 'T *' lvalue ParmVar {{.*}} 'pt' 'T *'
|
|
// CHECK-NEXT: IntegerLiteral {{.*}} 'int' 3
|
|
pt + 3;
|
|
|
|
// CHECK: BinaryOperator {{.*}} '<dependent type>' '-'
|
|
// CHECK-NEXT: DeclRefExpr {{.*}} 'T *' lvalue ParmVar {{.*}} 'pt' 'T *'
|
|
// CHECK-NEXT: DeclRefExpr {{.*}} 'T *' lvalue ParmVar {{.*}} 'pt' 'T *'
|
|
pt - pt;
|
|
|
|
// CHECK: BinaryOperator {{.*}} '<dependent type>' '-'
|
|
// CHECK-NEXT: DeclRefExpr {{.*}} 'T *' lvalue ParmVar {{.*}} 'pt' 'T *'
|
|
// CHECK-NEXT: DeclRefExpr {{.*}} 'U *' lvalue ParmVar {{.*}} 'pu' 'U *'
|
|
pt - pu;
|
|
|
|
// CHECK: BinaryOperator {{.*}} '<dependent type>' '=='
|
|
// CHECK-NEXT: DeclRefExpr {{.*}} 'T *' lvalue ParmVar {{.*}} 'pt' 'T *'
|
|
// CHECK-NEXT: DeclRefExpr {{.*}} 'U *' lvalue ParmVar {{.*}} 'pu' 'U *'
|
|
pt == pu;
|
|
}
|
|
} // namespace Test
|