58 lines
1.2 KiB
Text
58 lines
1.2 KiB
Text
|
// RUN: %clang_cc1 -isystem %S/Inputs -fsyntax-only -verify %s
|
||
|
// RUN: %clang_cc1 -isystem %S/Inputs -fcuda-is-device -fsyntax-only -verify %s
|
||
|
|
||
|
#include <cuda.h>
|
||
|
|
||
|
// Check trivial ctor/dtor
|
||
|
struct A {
|
||
|
int x;
|
||
|
A() {}
|
||
|
~A() {}
|
||
|
};
|
||
|
|
||
|
__device__ A a;
|
||
|
|
||
|
// Check trivial ctor/dtor of template class
|
||
|
template<typename T>
|
||
|
struct TA {
|
||
|
T x;
|
||
|
TA() {}
|
||
|
~TA() {}
|
||
|
};
|
||
|
|
||
|
__device__ TA<int> ta;
|
||
|
|
||
|
// Check non-trivial ctor/dtor in parent template class
|
||
|
template<typename T>
|
||
|
struct TB {
|
||
|
T x;
|
||
|
TB() { static int nontrivial_ctor = 1; }
|
||
|
~TB() {}
|
||
|
};
|
||
|
|
||
|
template<typename T>
|
||
|
struct TC : TB<T> {
|
||
|
T x;
|
||
|
TC() {}
|
||
|
~TC() {}
|
||
|
};
|
||
|
|
||
|
template class TC<int>;
|
||
|
|
||
|
__device__ TC<int> tc; //expected-error {{dynamic initialization is not supported for __device__, __constant__, __shared__, and __managed__ variables}}
|
||
|
|
||
|
// Check trivial ctor specialization
|
||
|
template <typename T>
|
||
|
struct C {
|
||
|
explicit C() {};
|
||
|
};
|
||
|
|
||
|
template <> C<int>::C() {};
|
||
|
__device__ C<int> ci_d;
|
||
|
C<int> ci_h;
|
||
|
|
||
|
// Check non-trivial ctor specialization
|
||
|
template <> C<float>::C() { static int nontrivial_ctor = 1; }
|
||
|
__device__ C<float> cf_d; //expected-error {{dynamic initialization is not supported for __device__, __constant__, __shared__, and __managed__ variables}}
|
||
|
C<float> cf_h;
|