forked from llvm/llvm-project
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[CUDA][HIP] Fix template static member
Should check host/device attributes before emitting static member of template instantiation. Fixes: llvm#98151
- Loading branch information
Showing
2 changed files
with
52 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,50 @@ | ||
// RUN: %clang_cc1 -triple amdgcn-amd-amdhsa -fcuda-is-device \ | ||
// RUN: -emit-llvm -o - -x hip %s | FileCheck -check-prefix=DEV %s | ||
|
||
// RUN: %clang_cc1 -triple x86_64-gnu-linux -std=c++11 \ | ||
// RUN: -emit-llvm -o - -x hip %s | FileCheck -check-prefix=HOST %s | ||
|
||
// Negative tests. | ||
|
||
// RUN: %clang_cc1 -triple amdgcn-amd-amdhsa -fcuda-is-device \ | ||
// RUN: -emit-llvm -o - -x hip %s | FileCheck -check-prefix=DEV-NEG %s | ||
|
||
#include "Inputs/cuda.h" | ||
|
||
template <class T> | ||
class A { | ||
static int h_member; | ||
__device__ static int d_member; | ||
__constant__ static int c_member; | ||
__managed__ static int m_member; | ||
const static int const_member = 0; | ||
}; | ||
|
||
template <class T> | ||
int A<T>::h_member; | ||
|
||
template <class T> | ||
__device__ int A<T>::d_member; | ||
|
||
template <class T> | ||
__constant__ int A<T>::c_member; | ||
|
||
template <class T> | ||
__managed__ int A<T>::m_member; | ||
|
||
template <class T> | ||
const int A<T>::const_member; | ||
|
||
template class A<int>; | ||
|
||
//DEV-DAG: @_ZN1AIiE8d_memberE = internal addrspace(1) global i32 0, comdat, align 4 | ||
//DEV-DAG: @_ZN1AIiE8c_memberE = internal addrspace(4) global i32 0, comdat, align 4 | ||
//DEV-DAG: @_ZN1AIiE8m_memberE = internal addrspace(1) externally_initialized global ptr addrspace(1) null | ||
//DEV-DAG: @_ZN1AIiE12const_memberE = internal addrspace(4) constant i32 0, comdat, align 4 | ||
//DEV-NEG-NOT: @_ZN1AIiE8h_memberE | ||
|
||
//HOST-DAG: @_ZN1AIiE8h_memberE = weak_odr global i32 0, comdat, align 4 | ||
//HOST-DAG: @_ZN1AIiE8d_memberE = internal global i32 undef, comdat, align 4 | ||
//HOST-DAG: @_ZN1AIiE8c_memberE = internal global i32 undef, comdat, align 4 | ||
//HOST-DAG: @_ZN1AIiE8m_memberE = internal externally_initialized global ptr null | ||
//HOST-DAG: @_ZN1AIiE12const_memberE = weak_odr constant i32 0, comdat, align 4 |