http://llvm.org/bugs/show_bug.cgi?id=10958
Summary: ASTImporter: Lookup for empty DeclarationName when
searching for typedef
Product: clang
Version: trunk
Platform: PC
OS/Version: All
Status: NEW
Severity: normal
Priority: P
Component: Frontend
AssignedTo: [email protected]
ReportedBy: [email protected]
CC: [email protected]
ASTImporter looks for existing declarations/definitions of structs before
importing it again. This behavior is implemented in
ASTNodeImporter::VisitRecordDecl. It also looks for anonymous structs in
typedefs, i.e.
typedef struct {
int x;
} NameOfStruct;
It will save the typedef's name in the variable "SearchName". However, when
looking up the identifier, it uses the original "Name" variable that contains
the struct's name which is empty for anonymous structs. I suggest to replace it
with SearchName. Same applies for the copy&pasted
ASTNodeImporter::VisitEnumDecl.
Bug found in clang 2.9 and Revision 140031
Suggested fix (below) works for clang 2.9
Generally, ASTImporter is very immature.
Index: ASTImporter.cpp
===================================================================
--- ASTImporter.cpp (revision 140023)
+++ ASTImporter.cpp (working copy)
@@ -2178,7 +2178,7 @@
// We may already have an enum of the same name; try to find and match it.
if (!DC->isFunctionOrMethod() && SearchName) {
SmallVector<NamedDecl *, 4> ConflictingDecls;
- for (DeclContext::lookup_result Lookup = DC->lookup(Name);
+ for (DeclContext::lookup_result Lookup = DC->lookup(SearchName);
Lookup.first != Lookup.second;
++Lookup.first) {
if (!(*Lookup.first)->isInIdentifierNamespace(IDNS))
@@ -2264,7 +2264,7 @@
RecordDecl *AdoptDecl = 0;
if (!DC->isFunctionOrMethod() && SearchName) {
SmallVector<NamedDecl *, 4> ConflictingDecls;
- for (DeclContext::lookup_result Lookup = DC->lookup(Name);
+ for (DeclContext::lookup_result Lookup = DC->lookup(SearchName);
Lookup.first != Lookup.second;
++Lookup.first) {
if (!(*Lookup.first)->isInIdentifierNamespace(IDNS))
--
Configure bugmail: http://llvm.org/bugs/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.
_______________________________________________
LLVMbugs mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/llvmbugs