aboutsummaryrefslogtreecommitdiff
path: root/lib/CodeGen/CodeGenModule.h
diff options
context:
space:
mode:
authorDaniel Dunbar <daniel@zuster.org>2009-02-17 18:43:32 +0000
committerDaniel Dunbar <daniel@zuster.org>2009-02-17 18:43:32 +0000
commitd60f2fbf69df08e952377b498c036f269395024d (patch)
tree1d916f7aac75a55f7f5daf243c282f03e428891d /lib/CodeGen/CodeGenModule.h
parentbb7677391a9db7d062a7cc637db8960d89ec7c93 (diff)
Change EmitConstantExpr to allow failure.
IRgen no longer relies on isConstantInitializer, instead we just try to emit the constant. If that fails then in C we emit an error unsupported (this occurs when Sema accepted something that it doesn't know how to fold, and IRgen doesn't know how to emit) and in C++ we emit a guarded initializer. This ends up handling a few more cases, because IRgen was actually able to emit some of the constants Sema accepts but can't Evaluate(). For example, PR3398. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@64780 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/CodeGenModule.h')
-rw-r--r--lib/CodeGen/CodeGenModule.h5
1 files changed, 5 insertions, 0 deletions
diff --git a/lib/CodeGen/CodeGenModule.h b/lib/CodeGen/CodeGenModule.h
index ff1437c20d..b54ee13df6 100644
--- a/lib/CodeGen/CodeGenModule.h
+++ b/lib/CodeGen/CodeGenModule.h
@@ -247,7 +247,12 @@ public:
const std::string &Name);
void UpdateCompletedType(const TagDecl *D);
+
+ /// EmitConstantExpr - Try to emit the given expression as a
+ /// constant; returns 0 if the expression cannot be emitted as a
+ /// constant.
llvm::Constant *EmitConstantExpr(const Expr *E, CodeGenFunction *CGF = 0);
+
llvm::Constant *EmitAnnotateAttr(llvm::GlobalValue *GV,
const AnnotateAttr *AA, unsigned LineNo);