Странное поведение с __constant__ - PullRequest
0 голосов
/ 10 июля 2019

Следующий код

#define CUDA_BOTH __host__ __device__

struct array {
    CUDA_BOTH inline array() {}  // LINE1
    CUDA_BOTH inline array(double* d) : _data(d) {}
    double* _data;
};

struct test_t {
    array x1;
    array x2;  // LINE2
};

struct mytest_t : public test_t {
};

__constant__ test_t g_test;    // LINE3
__constant__ mytest_t g_mytest;   // LINE4

int main(){
    return 0;
}

не может скомпилироваться с ошибкой

error: dynamic initialization is not supported for a __constant__ variable

on LINE4.Очевидно, проблема в определении на LINE1.Тем не менее, он у меня есть, чтобы разрешить как пустую конструкцию, так и конструктор с аргументами.

Странное поведение в том, что определение в LINE3 не дает никаких ошибок, даже если mytest_t просто наследуется от test_t без добавления каких-либо полей.

Более того, если я прокомментирую LINE2 все работает!

Есть ли способ заставить эту работу?Или кто-то может объяснить противоречивое поведение?

...