diff options
author | Ed Maste <emaste@FreeBSD.org> | 2015-07-03 16:57:06 +0000 |
---|---|---|
committer | Ed Maste <emaste@FreeBSD.org> | 2015-07-03 16:57:06 +0000 |
commit | 5e95aa85bb660d45e9905ef1d7180b2678280660 (patch) | |
tree | 3c2e41c3be19b7fc7666ed45a5f91ec3b6e35f2a /source/Symbol/Type.cpp | |
parent | 12bd4897ff0678fa663e09d78ebc22dd255ceb86 (diff) |
Diffstat (limited to 'source/Symbol/Type.cpp')
-rw-r--r-- | source/Symbol/Type.cpp | 23 |
1 files changed, 17 insertions, 6 deletions
diff --git a/source/Symbol/Type.cpp b/source/Symbol/Type.cpp index 6e67f4695d9f..0927d55f1ee2 100644 --- a/source/Symbol/Type.cpp +++ b/source/Symbol/Type.cpp @@ -589,16 +589,27 @@ Type::ResolveClangType (ResolveState clang_type_resolve_state) break; } } + + // When we have a EncodingUID, our "m_flags.clang_type_resolve_state" is set to eResolveStateUnresolved + // so we need to update it to say that we now have a forward declaration since that is what we created + // above. + if (m_clang_type.IsValid()) + m_flags.clang_type_resolve_state = eResolveStateForward; + } - + // Check if we have a forward reference to a class/struct/union/enum? - if (m_clang_type.IsValid() && m_flags.clang_type_resolve_state < clang_type_resolve_state) + if (clang_type_resolve_state == eResolveStateLayout || clang_type_resolve_state == eResolveStateFull) { - m_flags.clang_type_resolve_state = eResolveStateFull; - if (!m_clang_type.IsDefined ()) + // Check if we have a forward reference to a class/struct/union/enum? + if (m_clang_type.IsValid() && m_flags.clang_type_resolve_state < clang_type_resolve_state) { - // We have a forward declaration, we need to resolve it to a complete definition. - m_symbol_file->ResolveClangOpaqueTypeDefinition (m_clang_type); + m_flags.clang_type_resolve_state = eResolveStateFull; + if (!m_clang_type.IsDefined ()) + { + // We have a forward declaration, we need to resolve it to a complete definition. + m_symbol_file->ResolveClangOpaqueTypeDefinition (m_clang_type); + } } } |