1 // RUN: %clang_cc1 -std=c++14 %s -emit-llvm -o - -triple nvptx \ 2 // RUN: -fcuda-is-device | FileCheck --check-prefixes=CXX14 %s 3 // RUN: %clang_cc1 -std=c++17 %s -emit-llvm -o - -triple nvptx \ 4 // RUN: -fcuda-is-device | FileCheck --check-prefixes=CXX17 %s 5 6 #include "Inputs/cuda.h" 7 8 // COM: @_ZL1a = internal {{.*}}constant i32 7 9 constexpr int a = 7; 10 __constant__ const int &use_a = a; 11 12 namespace B { 13 // COM: @_ZN1BL1bE = internal {{.*}}constant i32 9 14 constexpr int b = 9; 15 } 16 __constant__ const int &use_B_b = B::b; 17 18 struct Q { 19 // CXX14: @_ZN1Q2k2E = {{.*}}externally_initialized constant i32 6 20 // CXX17: @_ZN1Q2k2E = internal {{.*}}constant i32 6 21 // CXX14: @_ZN1Q2k1E = available_externally {{.*}}constant i32 5 22 // CXX17: @_ZN1Q2k1E = {{.*}} externally_initialized constant i32 5 23 static constexpr int k1 = 5; 24 static constexpr int k2 = 6; 25 }; 26 constexpr int Q::k2; 27 28 __constant__ const int &use_Q_k1 = Q::k1; 29 __constant__ const int &use_Q_k2 = Q::k2; 30 31 template<typename T> struct X { 32 // CXX14: @_ZN1XIiE1aE = available_externally {{.*}}constant i32 123 33 // CXX17: @_ZN1XIiE1aE = {{.*}}externally_initialized constant i32 123 34 static constexpr int a = 123; 35 }; 36 __constant__ const int &use_X_a = X<int>::a; 37 38 template <typename T, T a, T b> struct A { 39 // CXX14: @_ZN1AIiLi1ELi2EE1xE = available_externally {{.*}}constant i32 2 40 // CXX17: @_ZN1AIiLi1ELi2EE1xE = {{.*}}externally_initialized constant i32 2 41 constexpr static T x = a * b; 42 }; 43 __constant__ const int &y = A<int, 1, 2>::x; 44