diff --git a/clang/lib/CodeGen/CGExprConstant.cpp b/clang/lib/CodeGen/CGExprConstant.cpp --- a/clang/lib/CodeGen/CGExprConstant.cpp +++ b/clang/lib/CodeGen/CGExprConstant.cpp @@ -1122,9 +1122,10 @@ } case CK_AtomicToNonAtomic: - case CK_NonAtomicToAtomic: - case CK_NoOp: case CK_ConstructorConversion: + case CK_FunctionToPointerDecay: + case CK_NoOp: + case CK_NonAtomicToAtomic: return Visit(subExpr, destType); case CK_ArrayToPointerDecay: @@ -1189,7 +1190,6 @@ case CK_CPointerToObjCPointerCast: case CK_BlockPointerToObjCPointerCast: case CK_AnyPointerToBlockPointerCast: - case CK_FunctionToPointerDecay: case CK_BaseToDerived: case CK_DerivedToBase: case CK_UncheckedDerivedToBase: @@ -1241,6 +1241,26 @@ return llvm::ConstantInt::get(CGM.getLLVMContext(), I->getValue()); } + llvm::Constant *VisitDeclRefExpr(DeclRefExpr *D, QualType T) { + //llvm::dbgs() << __func__ << "\n"; + //D->dump(); + //VD->dump(); + ValueDecl *VD = D->getDecl(); + if (isa(VD)) { + return CGM.getModule().getNamedValue(VD->getName()); + //llvm::Module &M = CGM.getModule(); + //llvm::GlobalValue *GV = M.getNamedValue(VD->getName()); + //return GV; + } + //D->getSubExpr()->dump(); + //llvm::dbgs() << isa(D) << "\n"; + //llvm::GlobalValue *GV = CGM.getModule().getNamedValue(D->getName()); + return nullptr; + //return nullptr; + //llvm::Value *V = Emitter.CGF->EmitDeclRefLValue(D).getPointer(*Emitter.CGF); + //return dyn_cast_or_null(V); + } + llvm::Constant *EmitArrayInitialization(InitListExpr *ILE, QualType T) { auto *CAT = CGM.getContext().getAsConstantArrayType(ILE->getType()); assert(CAT && "can't emit array init for non-constant-bound array");