Fix GCC warning on enum class bitfield. NFC.
diff --git a/clang/lib/CodeGen/CGCUDANV.cpp b/clang/lib/CodeGen/CGCUDANV.cpp
index ed02a7d..6d92ef3 100644
--- a/clang/lib/CodeGen/CGCUDANV.cpp
+++ b/clang/lib/CodeGen/CGCUDANV.cpp
@@ -466,18 +466,19 @@
for (auto &&Info : DeviceVars) {
llvm::GlobalVariable *Var = Info.Var;
llvm::Constant *VarName = makeConstantString(getDeviceSideName(Info.D));
- switch (Info.Flags.Kind) {
+ switch (Info.Flags.getKind()) {
case DeviceVarFlags::Variable: {
uint64_t VarSize =
CGM.getDataLayout().getTypeAllocSize(Var->getValueType());
- llvm::Value *Args[] = {&GpuBinaryHandlePtr,
- Builder.CreateBitCast(Var, VoidPtrTy),
- VarName,
- VarName,
- llvm::ConstantInt::get(IntTy, Info.Flags.Extern),
- llvm::ConstantInt::get(IntTy, VarSize),
- llvm::ConstantInt::get(IntTy, Info.Flags.Constant),
- llvm::ConstantInt::get(IntTy, 0)};
+ llvm::Value *Args[] = {
+ &GpuBinaryHandlePtr,
+ Builder.CreateBitCast(Var, VoidPtrTy),
+ VarName,
+ VarName,
+ llvm::ConstantInt::get(IntTy, Info.Flags.isExtern()),
+ llvm::ConstantInt::get(IntTy, VarSize),
+ llvm::ConstantInt::get(IntTy, Info.Flags.isConstant()),
+ llvm::ConstantInt::get(IntTy, 0)};
Builder.CreateCall(RegisterVar, Args);
break;
}
@@ -485,16 +486,16 @@
Builder.CreateCall(
RegisterSurf,
{&GpuBinaryHandlePtr, Builder.CreateBitCast(Var, VoidPtrTy), VarName,
- VarName, llvm::ConstantInt::get(IntTy, Info.Flags.SurfTexType),
- llvm::ConstantInt::get(IntTy, Info.Flags.Extern)});
+ VarName, llvm::ConstantInt::get(IntTy, Info.Flags.getSurfTexType()),
+ llvm::ConstantInt::get(IntTy, Info.Flags.isExtern())});
break;
case DeviceVarFlags::Texture:
Builder.CreateCall(
RegisterTex,
{&GpuBinaryHandlePtr, Builder.CreateBitCast(Var, VoidPtrTy), VarName,
- VarName, llvm::ConstantInt::get(IntTy, Info.Flags.SurfTexType),
- llvm::ConstantInt::get(IntTy, Info.Flags.Normalized),
- llvm::ConstantInt::get(IntTy, Info.Flags.Extern)});
+ VarName, llvm::ConstantInt::get(IntTy, Info.Flags.getSurfTexType()),
+ llvm::ConstantInt::get(IntTy, Info.Flags.isNormalized()),
+ llvm::ConstantInt::get(IntTy, Info.Flags.isExtern())});
break;
}
}
diff --git a/clang/lib/CodeGen/CGCUDARuntime.h b/clang/lib/CodeGen/CGCUDARuntime.h
index b261324..19e70a2 100644
--- a/clang/lib/CodeGen/CGCUDARuntime.h
+++ b/clang/lib/CodeGen/CGCUDARuntime.h
@@ -42,17 +42,30 @@
public:
// Global variable properties that must be passed to CUDA runtime.
- struct DeviceVarFlags {
- enum DeviceVarKind : unsigned {
+ class DeviceVarFlags {
+ public:
+ enum DeviceVarKind {
Variable, // Variable
Surface, // Builtin surface
Texture, // Builtin texture
};
- DeviceVarKind Kind : 2;
+
+ private:
+ unsigned Kind : 2;
unsigned Extern : 1;
unsigned Constant : 1; // Constant variable.
unsigned Normalized : 1; // Normalized texture.
int SurfTexType; // Type of surface/texutre.
+
+ public:
+ DeviceVarFlags(DeviceVarKind K, bool E, bool C, bool N, int T)
+ : Kind(K), Extern(E), Constant(C), Normalized(N), SurfTexType(T) {}
+
+ DeviceVarKind getKind() const { return static_cast<DeviceVarKind>(Kind); }
+ bool isExtern() const { return Extern; }
+ bool isConstant() const { return Constant; }
+ bool isNormalized() const { return Normalized; }
+ int getSurfTexType() const { return SurfTexType; }
};
CGCUDARuntime(CodeGenModule &CGM) : CGM(CGM) {}