44 lines
1.5 KiB
Plaintext
44 lines
1.5 KiB
Plaintext
|
// RUN: %clang_cc1 -std=c++14 %s -emit-llvm -o - -triple nvptx \
|
||
|
// RUN: -fcuda-is-device | FileCheck --check-prefixes=CXX14 %s
|
||
|
// RUN: %clang_cc1 -std=c++17 %s -emit-llvm -o - -triple nvptx \
|
||
|
// RUN: -fcuda-is-device | FileCheck --check-prefixes=CXX17 %s
|
||
|
|
||
|
#include "Inputs/cuda.h"
|
||
|
|
||
|
// COM: @_ZL1a = internal {{.*}}constant i32 7
|
||
|
constexpr int a = 7;
|
||
|
__constant__ const int &use_a = a;
|
||
|
|
||
|
namespace B {
|
||
|
// COM: @_ZN1BL1bE = internal {{.*}}constant i32 9
|
||
|
constexpr int b = 9;
|
||
|
}
|
||
|
__constant__ const int &use_B_b = B::b;
|
||
|
|
||
|
struct Q {
|
||
|
// CXX14: @_ZN1Q2k2E = {{.*}}externally_initialized constant i32 6
|
||
|
// CXX17: @_ZN1Q2k2E = internal {{.*}}constant i32 6
|
||
|
// CXX14: @_ZN1Q2k1E = available_externally {{.*}}constant i32 5
|
||
|
// CXX17: @_ZN1Q2k1E = {{.*}} externally_initialized constant i32 5
|
||
|
static constexpr int k1 = 5;
|
||
|
static constexpr int k2 = 6;
|
||
|
};
|
||
|
constexpr int Q::k2;
|
||
|
|
||
|
__constant__ const int &use_Q_k1 = Q::k1;
|
||
|
__constant__ const int &use_Q_k2 = Q::k2;
|
||
|
|
||
|
template<typename T> struct X {
|
||
|
// CXX14: @_ZN1XIiE1aE = available_externally {{.*}}constant i32 123
|
||
|
// CXX17: @_ZN1XIiE1aE = {{.*}}externally_initialized constant i32 123
|
||
|
static constexpr int a = 123;
|
||
|
};
|
||
|
__constant__ const int &use_X_a = X<int>::a;
|
||
|
|
||
|
template <typename T, T a, T b> struct A {
|
||
|
// CXX14: @_ZN1AIiLi1ELi2EE1xE = available_externally {{.*}}constant i32 2
|
||
|
// CXX17: @_ZN1AIiLi1ELi2EE1xE = {{.*}}externally_initialized constant i32 2
|
||
|
constexpr static T x = a * b;
|
||
|
};
|
||
|
__constant__ const int &y = A<int, 1, 2>::x;
|