1 // RUN: %clang_cc1 -no-opaque-pointers -S -emit-llvm -o - -triple=x86_64-linux-gnu %s | FileCheck %s -check-prefix=CHECK-YES 2 // RUN: %clang_cc1 -no-opaque-pointers -S -emit-llvm -o - -fno-delete-null-pointer-checks -triple=x86_64-linux-gnu %s | FileCheck %s -check-prefix=CHECK-NO 3 4 struct Struct { 5 int many; 6 int member; 7 int fields; 8 void ReturnsVoid(); 9 }; 10 11 void TestReturnsVoid(Struct &s) { 12 s.ReturnsVoid(); 13 14 // CHECK-YES: call void @_ZN6Struct11ReturnsVoidEv(%struct.Struct* noundef nonnull align 4 dereferenceable(12) %0) 15 /// FIXME Use dereferenceable after dereferenceable respects NullPointerIsValid. 16 // CHECK-NO: call void @_ZN6Struct11ReturnsVoidEv(%struct.Struct* noundef align 4 dereferenceable_or_null(12) %0) 17 } 18 19 // CHECK-YES: declare void @_ZN6Struct11ReturnsVoidEv(%struct.Struct* noundef nonnull align 4 dereferenceable(12)) 20 // CHECK-NO: declare void @_ZN6Struct11ReturnsVoidEv(%struct.Struct* noundef align 4 dereferenceable_or_null(12)) 21