diff options
author | arphaman <arphaman@gmail.com> | 2013-09-21 11:37:15 +0100 |
---|---|---|
committer | arphaman <arphaman@gmail.com> | 2013-09-21 11:37:15 +0100 |
commit | 8ad3250df545aaa917a63bf07f62d8ae101591a8 (patch) | |
tree | 08e5b12a42874a544628adf35a4e4a5bfdd26bc3 | |
parent | 94075050b2849974ba0f6327cfbef72ead76bd75 (diff) | |
download | flang-8ad3250df545aaa917a63bf07f62d8ae101591a8.tar.gz |
fixed bugs in COMMON sema and codegen
-rw-r--r-- | include/flang/Sema/Scope.h | 2 | ||||
-rw-r--r-- | lib/CodeGen/CGDecl.cpp | 1 | ||||
-rw-r--r-- | lib/Sema/Scope.cpp | 3 |
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); |