summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorarphaman <arphaman@gmail.com>2013-09-21 11:37:15 +0100
committerarphaman <arphaman@gmail.com>2013-09-21 11:37:15 +0100
commit8ad3250df545aaa917a63bf07f62d8ae101591a8 (patch)
tree08e5b12a42874a544628adf35a4e4a5bfdd26bc3
parent94075050b2849974ba0f6327cfbef72ead76bd75 (diff)
downloadflang-8ad3250df545aaa917a63bf07f62d8ae101591a8.tar.gz
fixed bugs in COMMON sema and codegen
-rw-r--r--include/flang/Sema/Scope.h2
-rw-r--r--lib/CodeGen/CGDecl.cpp1
-rw-r--r--lib/Sema/Scope.cpp3
3 files changed, 6 insertions, 0 deletions
diff --git a/include/flang/Sema/Scope.h b/include/flang/Sema/Scope.h
index 3fff72d0b2..523db4e4bc 100644
--- a/include/flang/Sema/Scope.h
+++ b/include/flang/Sema/Scope.h
@@ -317,6 +317,8 @@ private:
BlockMappingTy Blocks;
public:
+ CommonBlockScope();
+
bool hasUnnamed() const {
return UnnamedBlock != nullptr;
}
diff --git a/lib/CodeGen/CGDecl.cpp b/lib/CodeGen/CGDecl.cpp
index 5a060f6569..d6fb515756 100644
--- a/lib/CodeGen/CGDecl.cpp
+++ b/lib/CodeGen/CGDecl.cpp
@@ -173,6 +173,7 @@ void CodeGenFunction::EmitCommonBlock(const CommonBlockSet *S) {
auto CBType = llvm::StructType::get(CGM.getLLVMContext(), Items);
auto Ptr = Builder.CreateBitCast(CGM.EmitCommonBlock(S->getDecl(), CBType),
llvm::PointerType::get(CBType, 0));
+ CommonBlocks.insert(std::make_pair(S, Ptr));
unsigned Idx = 0;
for(auto Obj : S->getObjects()) {
if(Obj.Var) {
diff --git a/lib/Sema/Scope.cpp b/lib/Sema/Scope.cpp
index 2446cb33b6..276dce0290 100644
--- a/lib/Sema/Scope.cpp
+++ b/lib/Sema/Scope.cpp
@@ -154,6 +154,9 @@ Decl *InnerScope::Resolve(const IdentifierInfo *IDInfo) const {
return Result? Result : (Parent? Parent->Resolve(IDInfo) : nullptr);
}
+CommonBlockScope::CommonBlockScope()
+ : UnnamedBlock(nullptr) {}
+
CommonBlockDecl *CommonBlockScope::find(const IdentifierInfo *IDInfo) {
assert(IDInfo);
auto Result = Blocks.find(IDInfo);