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
151 lines
9.1 KiB
Objective-C
151 lines
9.1 KiB
Objective-C
// RUN: %clang_cc1 -triple x86_64-apple-macosx11.0.0 -fobjc-runtime=macosx-11.0.0 -fobjc-constant-literals -fconstant-nsnumber-literals -I %S/Inputs -emit-llvm -o - %s | FileCheck %s --check-prefix=CHECK
|
|
// RUN: %clang_cc1 -x objective-c++ -triple x86_64-apple-macosx11.0.0 -fobjc-runtime=macosx-11.0.0 -fobjc-constant-literals -fconstant-nsnumber-literals -I %S/Inputs -emit-llvm -o - %s | FileCheck %s --check-prefix=CHECK
|
|
// RUN: %clang_cc1 -triple arm64-apple-ios14.0 -fobjc-runtime=ios-14.0 -fobjc-constant-literals -fconstant-nsnumber-literals -I %S/Inputs -emit-llvm -o - %s | FileCheck %s --check-prefix=CHECK
|
|
|
|
#if __has_feature(objc_constant_literals)
|
|
|
|
#if __has_feature(objc_bool)
|
|
#define YES __objc_yes
|
|
#define NO __objc_no
|
|
#else
|
|
#define YES ((BOOL)1)
|
|
#define NO ((BOOL)0)
|
|
#endif
|
|
|
|
#include <stdbool.h>
|
|
#define CTrue ((bool)1)
|
|
#define CFalse ((bool)0)
|
|
|
|
#define NAN __builtin_nanf("0x7fc00000")
|
|
#define INFINITY __builtin_huge_valf()
|
|
|
|
#include "constant-literal-support.h"
|
|
|
|
// CHECK: %struct.__builtin_NSConstantIntegerNumber = type { ptr, ptr, i64 }
|
|
// CHECK: %struct.__builtin_NSConstantFloatNumber = type { ptr, float }
|
|
// CHECK: %struct.__builtin_NSConstantDoubleNumber = type { ptr, double }
|
|
|
|
// CHECK: @_unnamed_nsconstantintegernumber_ = private constant %struct.__builtin_NSConstantIntegerNumber { ptr @"OBJC_CLASS_$_NSConstantIntegerNumber", ptr @.str, i64 97 }, section "__DATA,__objc_intobj,regular,no_dead_strip", align 8 #[[ATTR0:[0-9+]]]
|
|
// CHECK: @_unnamed_nsconstantintegernumber_.2 = private constant %struct.__builtin_NSConstantIntegerNumber { ptr @"OBJC_CLASS_$_NSConstantIntegerNumber", ptr @.str.1, i64 42 }, section "__DATA,__objc_intobj,regular,no_dead_strip", align 8 #[[ATTR0]]
|
|
// CHECK: @_unnamed_nsconstantintegernumber_.3 = private constant %struct.__builtin_NSConstantIntegerNumber { ptr @"OBJC_CLASS_$_NSConstantIntegerNumber", ptr @.str.1, i64 -42 }, section "__DATA,__objc_intobj,regular,no_dead_strip", align 8 #[[ATTR0]]
|
|
// CHECK: @_unnamed_nsconstantintegernumber_.5 = private constant %struct.__builtin_NSConstantIntegerNumber { ptr @"OBJC_CLASS_$_NSConstantIntegerNumber", ptr @.str.4, i64 42 }, section "__DATA,__objc_intobj,regular,no_dead_strip", align 8 #[[ATTR0]]
|
|
// CHECK: @_unnamed_nsconstantintegernumber_.7 = private constant %struct.__builtin_NSConstantIntegerNumber { ptr @"OBJC_CLASS_$_NSConstantIntegerNumber", ptr @.str.6, i64 42 }, section "__DATA,__objc_intobj,regular,no_dead_strip", align 8 #[[ATTR0]]
|
|
// CHECK: @_unnamed_nsconstantintegernumber_.8 = private constant %struct.__builtin_NSConstantIntegerNumber { ptr @"OBJC_CLASS_$_NSConstantIntegerNumber", ptr @.str.6, i64 42 }, section "__DATA,__objc_intobj,regular,no_dead_strip", align 8 #[[ATTR0]]
|
|
// CHECK: @"OBJC_CLASS_$_NSConstantFloatNumber" = external global %struct._class_t
|
|
// CHECK: @_unnamed_nsconstantfloatnumber_ = private constant %struct.__builtin_NSConstantFloatNumber { ptr @"OBJC_CLASS_$_NSConstantFloatNumber", float f0x40490FDB }, section "__DATA,__objc_floatobj,regular,no_dead_strip", align 8 #[[ATTR0]]
|
|
// CHECK: @"OBJC_CLASS_$_NSConstantDoubleNumber" = external global %struct._class_t
|
|
// CHECK: @_unnamed_nsconstantdoublenumber_ = private constant %struct.__builtin_NSConstantDoubleNumber { ptr @"OBJC_CLASS_$_NSConstantDoubleNumber", double f0x400921FB54411744 }, section "__DATA,__objc_doubleobj,regular,no_dead_strip", align 8 #[[ATTR0]]
|
|
// CHECK: @__kCFBooleanTrue = external global ptr #0
|
|
// CHECK: @__kCFBooleanFalse = external global ptr #0
|
|
// CHECK: @_unnamed_nsconstantintegernumber_.9 = private constant %struct.__builtin_NSConstantIntegerNumber { ptr @"OBJC_CLASS_$_NSConstantIntegerNumber", ptr @.str.1, i64 1 }, section "__DATA,__objc_intobj,regular,no_dead_strip", align 8 #0
|
|
// CHECK: @_unnamed_nsconstantintegernumber_.10 = private constant %struct.__builtin_NSConstantIntegerNumber { ptr @"OBJC_CLASS_$_NSConstantIntegerNumber", ptr @.str.1, i64 0 }, section "__DATA,__objc_intobj,regular,no_dead_strip", align 8 #0
|
|
// CHECK: @_unnamed_nsconstantfloatnumber_.11 = private constant %struct.__builtin_NSConstantFloatNumber { ptr @"OBJC_CLASS_$_NSConstantFloatNumber", float +qnan }, section "__DATA,__objc_floatobj,regular,no_dead_strip", align 8 #0
|
|
// CHECK: @_unnamed_nsconstantfloatnumber_.12 = private constant %struct.__builtin_NSConstantFloatNumber { ptr @"OBJC_CLASS_$_NSConstantFloatNumber", float +inf }, section "__DATA,__objc_floatobj,regular,no_dead_strip", align 8 #0
|
|
// CHECK: @_unnamed_nsconstantfloatnumber_.13 = private constant %struct.__builtin_NSConstantFloatNumber { ptr @"OBJC_CLASS_$_NSConstantFloatNumber", float -inf }, section "__DATA,__objc_floatobj,regular,no_dead_strip", align 8 #0
|
|
// NOTE: We expect `@((NSUInteger)2046)` to have an encoding of "Q" or `kCFNumberSInt128Type` on 64bit platforms. Since that isn't a public type `CFNumberType` will detect that and return
|
|
// CHECK: @.str.14 = private unnamed_addr constant [2 x i8] c"Q\00", align 1
|
|
// CHECK: @_unnamed_nsconstantintegernumber_.15 = private constant %struct.__builtin_NSConstantIntegerNumber { ptr @"OBJC_CLASS_$_NSConstantIntegerNumber", ptr @.str.14, i64 2049 }, section "__DATA,__objc_intobj,regular,no_dead_strip", align 8 #0
|
|
// CHECK: @_unnamed_nsconstantdoublenumber_.16 = private constant %struct.__builtin_NSConstantDoubleNumber { ptr @"OBJC_CLASS_$_NSConstantDoubleNumber", double -0.000000e+00 }, section "__DATA,__objc_doubleobj,regular,no_dead_strip", align 8 #0
|
|
|
|
int main() {
|
|
|
|
// CHECK: store ptr @_unnamed_nsconstantintegernumber_, ptr %aNumber, align 8
|
|
NSNumber *aNumber = @'a';
|
|
|
|
// CHECK: store ptr @_unnamed_nsconstantintegernumber_, ptr %aNumber2, align 8
|
|
NSNumber *aNumber2 = @'a';
|
|
|
|
// CHECK: store ptr @_unnamed_nsconstantintegernumber_.2, ptr %fortyTwo, align 8
|
|
NSNumber *fortyTwo = @42;
|
|
|
|
// CHECK: store ptr @_unnamed_nsconstantintegernumber_.3, ptr %negativeFortyTwo, align 8
|
|
NSNumber *negativeFortyTwo = @-42;
|
|
|
|
// CHECK: store ptr @_unnamed_nsconstantintegernumber_.2, ptr %positiveFortyTwo, align 8
|
|
NSNumber *positiveFortyTwo = @+42;
|
|
|
|
// CHECK: store ptr @_unnamed_nsconstantintegernumber_.5, ptr %fortyTwoUnsigned, align 8
|
|
NSNumber *fortyTwoUnsigned = @42u;
|
|
|
|
// CHECK: store ptr @_unnamed_nsconstantintegernumber_.7, ptr %fortyTwoLong, align 8
|
|
NSNumber *fortyTwoLong = @42l;
|
|
|
|
// CHECK: store ptr @_unnamed_nsconstantintegernumber_.7, ptr %fortyTwoLong2, align 8
|
|
NSNumber *fortyTwoLong2 = @42l;
|
|
|
|
// CHECK: store ptr @_unnamed_nsconstantintegernumber_.8, ptr %fortyTwoLongLong, align 8
|
|
NSNumber *fortyTwoLongLong = @42ll;
|
|
|
|
// CHECK: store ptr @_unnamed_nsconstantintegernumber_.8, ptr %fortyTwoLongLong2, align 8
|
|
NSNumber *fortyTwoLongLong2 = @42ll;
|
|
|
|
// CHECK: store ptr @_unnamed_nsconstantfloatnumber_, ptr %piFloat, align 8
|
|
NSNumber *piFloat = @3.141592654f;
|
|
|
|
// CHECK: store ptr @_unnamed_nsconstantfloatnumber_, ptr %piFloat2, align 8
|
|
NSNumber *piFloat2 = @3.141592654f;
|
|
|
|
// CHECK: store ptr @_unnamed_nsconstantdoublenumber_, ptr %piDouble, align 8
|
|
NSNumber *piDouble = @3.1415926535;
|
|
|
|
// CHECK: store ptr @_unnamed_nsconstantdoublenumber_, ptr %piDouble2, align 8
|
|
NSNumber *piDouble2 = @3.1415926535;
|
|
|
|
// CHECK: store ptr @__kCFBooleanTrue, ptr %yesNumber, align 8
|
|
NSNumber *yesNumber = @(YES);
|
|
|
|
// CHECK: store ptr @__kCFBooleanFalse, ptr %noNumber, align 8
|
|
NSNumber *noNumber = @(NO);
|
|
|
|
// CHECK: store ptr @__kCFBooleanTrue, ptr %yesNumber1, align 8
|
|
NSNumber *yesNumber1 = @(__objc_yes);
|
|
|
|
// CHECK: store ptr @__kCFBooleanFalse, ptr %noNumber1, align 8
|
|
NSNumber *noNumber1 = @(__objc_no);
|
|
|
|
// CHECK: store ptr @__kCFBooleanTrue, ptr %c99BoolNumberTrue, align 8
|
|
NSNumber *c99BoolNumberTrue = @CTrue;
|
|
|
|
// CHECK: store ptr @__kCFBooleanFalse, ptr %c99BoolNumberFalse, align 8
|
|
NSNumber *c99BoolNumberFalse = @CFalse;
|
|
|
|
// CHECK: store ptr @_unnamed_nsconstantintegernumber_.9, ptr %trueLikeBoolNumber, align 8
|
|
NSNumber *trueLikeBoolNumber = @(1);
|
|
|
|
// CHECK: store ptr @_unnamed_nsconstantintegernumber_.10, ptr %falseLikeBoolNumber, align 8
|
|
NSNumber *falseLikeBoolNumber = @(0);
|
|
|
|
// CHECK: store ptr @_unnamed_nsconstantfloatnumber_.11, ptr %nanNumber, align 8
|
|
NSNumber *nanNumber = @(NAN);
|
|
|
|
// CHECK: store ptr @_unnamed_nsconstantfloatnumber_.11, ptr %nanNumber2, align 8
|
|
NSNumber *nanNumber2 = @(NAN);
|
|
|
|
// CHECK: store ptr @_unnamed_nsconstantfloatnumber_.12, ptr %infNumber, align 8
|
|
NSNumber *infNumber = @(INFINITY);
|
|
|
|
// CHECK: store ptr @_unnamed_nsconstantfloatnumber_.12, ptr %infNumber2, align 8
|
|
NSNumber *infNumber2 = @(INFINITY);
|
|
|
|
// CHECK: store ptr @_unnamed_nsconstantfloatnumber_.13, ptr %negInfNumber, align 8
|
|
NSNumber *negInfNumber = @(-INFINITY);
|
|
|
|
// CHECK: store ptr @_unnamed_nsconstantfloatnumber_.13, ptr %negInfNumber2, align 8
|
|
NSNumber *negInfNumber2 = @(-INFINITY);
|
|
|
|
// CHECK: @_unnamed_nsconstantintegernumber_.15, ptr %unsginedLongLongQEncoded, align 8
|
|
NSNumber *unsginedLongLongQEncoded = @((NSUInteger)2049); // NOTE: On 64bit platforms we expect this to have a "Q" encoding, on 32bit we expect this to have a "q" encoding.
|
|
|
|
// CHECK: store ptr @_unnamed_nsconstantdoublenumber_.16, ptr %negZero, align 8
|
|
NSNumber *negZero = @(-0.0);
|
|
|
|
// CHECK: store ptr @_unnamed_nsconstantdoublenumber_.16, ptr %negZero2, align 8
|
|
NSNumber *negZero2 = @(-0.0);
|
|
|
|
return 0;
|
|
}
|
|
|
|
// CHECK: attributes #[[ATTR0]] = { "objc_arc_inert" }
|
|
|
|
#endif
|