Fixed a bug where empty C structs were given size
1 by the expression parser. We now correctly report that they are of size 0. (C++ structs are mandated to have nonzero size, and Clang marks them as being 1 byte in size.) <rdar://problem/12380800> llvm-svn: 166256
This commit is contained in:
		
							parent
							
								
									ced93f3a05
								
							
						
					
					
						commit
						433cd221ec
					
				| 
						 | 
					@ -5611,6 +5611,27 @@ SymbolFileDWARF::ParseType (const SymbolContext& sc, DWARFCompileUnit* dwarf_cu,
 | 
				
			||||||
                            // No children for this struct/union/class, lets finish it
 | 
					                            // No children for this struct/union/class, lets finish it
 | 
				
			||||||
                            ast.StartTagDeclarationDefinition (clang_type);
 | 
					                            ast.StartTagDeclarationDefinition (clang_type);
 | 
				
			||||||
                            ast.CompleteTagDeclarationDefinition (clang_type);
 | 
					                            ast.CompleteTagDeclarationDefinition (clang_type);
 | 
				
			||||||
 | 
					                            
 | 
				
			||||||
 | 
					                            if (tag == DW_TAG_structure_type) // this only applies in C
 | 
				
			||||||
 | 
					                            {
 | 
				
			||||||
 | 
					                                clang::QualType qual_type = clang::QualType::getFromOpaquePtr (clang_type);
 | 
				
			||||||
 | 
					                                const clang::RecordType *record_type = qual_type->getAs<clang::RecordType> ();
 | 
				
			||||||
 | 
					                                
 | 
				
			||||||
 | 
					                                if (record_type)
 | 
				
			||||||
 | 
					                                {
 | 
				
			||||||
 | 
					                                    clang::RecordDecl *record_decl = record_type->getDecl();
 | 
				
			||||||
 | 
					                                    
 | 
				
			||||||
 | 
					                                    if (record_decl)
 | 
				
			||||||
 | 
					                                    {
 | 
				
			||||||
 | 
					                                        LayoutInfo layout_info;
 | 
				
			||||||
 | 
					                                        
 | 
				
			||||||
 | 
					                                        layout_info.alignment = 0;
 | 
				
			||||||
 | 
					                                        layout_info.bit_size = 0;
 | 
				
			||||||
 | 
					                                        
 | 
				
			||||||
 | 
					                                        m_record_decl_to_layout_map.insert(std::make_pair(record_decl, layout_info));
 | 
				
			||||||
 | 
					                                    }
 | 
				
			||||||
 | 
					                                }
 | 
				
			||||||
 | 
					                            }
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                        else if (clang_type_was_created)
 | 
					                        else if (clang_type_was_created)
 | 
				
			||||||
                        {
 | 
					                        {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue