From 75fc3bf5fe9ad5ad38492902b07ede50de3f18d4 Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Fri, 8 Feb 2013 00:37:45 +0000 Subject: [PATCH] Fix stack overflow and improve performance when a module contains many overloads of a name by claiming that there are no lookup results for that name in modules while loading the names from the module. Lookups in deserialization really don't want to find names which they themselves are in the process of introducing. This also has the pleasant side-effect of automatically caching PCH lookups which found no names. The runtime here is still quadratic in the number of overloads, but the constant is lower. llvm-svn: 174685 --- clang/lib/AST/DeclBase.cpp | 12 +- clang/test/Modules/Inputs/cxx-many-overloads.h | 2004 ++++++++++++++++++++++++ clang/test/Modules/Inputs/module.map | 4 + clang/test/Modules/cxx-many-overloads.cpp | 9 + 4 files changed, 2024 insertions(+), 5 deletions(-) create mode 100644 clang/test/Modules/Inputs/cxx-many-overloads.h create mode 100644 clang/test/Modules/cxx-many-overloads.cpp diff --git a/clang/lib/AST/DeclBase.cpp b/clang/lib/AST/DeclBase.cpp index 3039c95..e1202c2 100644 --- a/clang/lib/AST/DeclBase.cpp +++ b/clang/lib/AST/DeclBase.cpp @@ -1203,14 +1203,16 @@ DeclContext::lookup(DeclarationName Name) { if (LookupPtr.getInt()) Map = buildLookup(); + if (!Map) + Map = CreateStoredDeclsMap(getParentASTContext()); + // If a PCH/module has a result for this name, and we have a local // declaration, we will have imported the PCH/module result when adding the // local declaration or when reconciling the module. - if (Map) { - StoredDeclsMap::iterator I = Map->find(Name); - if (I != Map->end()) - return I->second.getLookupResult(); - } + std::pair R = + Map->insert(std::make_pair(Name, StoredDeclsList())); + if (!R.second) + return R.first->second.getLookupResult(); ExternalASTSource *Source = getParentASTContext().getExternalSource(); if (Source->FindExternalVisibleDeclsByName(this, Name)) { diff --git a/clang/test/Modules/Inputs/cxx-many-overloads.h b/clang/test/Modules/Inputs/cxx-many-overloads.h new file mode 100644 index 0000000..890a86c --- /dev/null +++ b/clang/test/Modules/Inputs/cxx-many-overloads.h @@ -0,0 +1,2004 @@ +namespace N { + template struct X {}; + void f(X<0>); + void f(X<1>); + void f(X<2>); + void f(X<3>); + void f(X<4>); + void f(X<5>); + void f(X<6>); + void f(X<7>); + void f(X<8>); + void f(X<9>); + void f(X<10>); + void f(X<11>); + void f(X<12>); + void f(X<13>); + void f(X<14>); + void f(X<15>); + void f(X<16>); + void f(X<17>); + void f(X<18>); + void f(X<19>); + void f(X<20>); + void f(X<21>); + void f(X<22>); + void f(X<23>); + void f(X<24>); + void f(X<25>); + void f(X<26>); + void f(X<27>); + void f(X<28>); + void f(X<29>); + void f(X<30>); + void f(X<31>); + void f(X<32>); + void f(X<33>); + void f(X<34>); + void f(X<35>); + void f(X<36>); + void f(X<37>); + void f(X<38>); + void f(X<39>); + void f(X<40>); + void f(X<41>); + void f(X<42>); + void f(X<43>); + void f(X<44>); + void f(X<45>); + void f(X<46>); + void f(X<47>); + void f(X<48>); + void f(X<49>); + void f(X<50>); + void f(X<51>); + void f(X<52>); + void f(X<53>); + void f(X<54>); + void f(X<55>); + void f(X<56>); + void f(X<57>); + void f(X<58>); + void f(X<59>); + void f(X<60>); + void f(X<61>); + void f(X<62>); + void f(X<63>); + void f(X<64>); + void f(X<65>); + void f(X<66>); + void f(X<67>); + void f(X<68>); + void f(X<69>); + void f(X<70>); + void f(X<71>); + void f(X<72>); + void f(X<73>); + void f(X<74>); + void f(X<75>); + void f(X<76>); + void f(X<77>); + void f(X<78>); + void f(X<79>); + void f(X<80>); + void f(X<81>); + void f(X<82>); + void f(X<83>); + void f(X<84>); + void f(X<85>); + void f(X<86>); + void f(X<87>); + void f(X<88>); + void f(X<89>); + void f(X<90>); + void f(X<91>); + void f(X<92>); + void f(X<93>); + void f(X<94>); + void f(X<95>); + void f(X<96>); + void f(X<97>); + void f(X<98>); + void f(X<99>); + void f(X<100>); + void f(X<101>); + void f(X<102>); + void f(X<103>); + void f(X<104>); + void f(X<105>); + void f(X<106>); + void f(X<107>); + void f(X<108>); + void f(X<109>); + void f(X<110>); + void f(X<111>); + void f(X<112>); + void f(X<113>); + void f(X<114>); + void f(X<115>); + void f(X<116>); + void f(X<117>); + void f(X<118>); + void f(X<119>); + void f(X<120>); + void f(X<121>); + void f(X<122>); + void f(X<123>); + void f(X<124>); + void f(X<125>); + void f(X<126>); + void f(X<127>); + void f(X<128>); + void f(X<129>); + void f(X<130>); + void f(X<131>); + void f(X<132>); + void f(X<133>); + void f(X<134>); + void f(X<135>); + void f(X<136>); + void f(X<137>); + void f(X<138>); + void f(X<139>); + void f(X<140>); + void f(X<141>); + void f(X<142>); + void f(X<143>); + void f(X<144>); + void f(X<145>); + void f(X<146>); + void f(X<147>); + void f(X<148>); + void f(X<149>); + void f(X<150>); + void f(X<151>); + void f(X<152>); + void f(X<153>); + void f(X<154>); + void f(X<155>); + void f(X<156>); + void f(X<157>); + void f(X<158>); + void f(X<159>); + void f(X<160>); + void f(X<161>); + void f(X<162>); + void f(X<163>); + void f(X<164>); + void f(X<165>); + void f(X<166>); + void f(X<167>); + void f(X<168>); + void f(X<169>); + void f(X<170>); + void f(X<171>); + void f(X<172>); + void f(X<173>); + void f(X<174>); + void f(X<175>); + void f(X<176>); + void f(X<177>); + void f(X<178>); + void f(X<179>); + void f(X<180>); + void f(X<181>); + void f(X<182>); + void f(X<183>); + void f(X<184>); + void f(X<185>); + void f(X<186>); + void f(X<187>); + void f(X<188>); + void f(X<189>); + void f(X<190>); + void f(X<191>); + void f(X<192>); + void f(X<193>); + void f(X<194>); + void f(X<195>); + void f(X<196>); + void f(X<197>); + void f(X<198>); + void f(X<199>); + void f(X<200>); + void f(X<201>); + void f(X<202>); + void f(X<203>); + void f(X<204>); + void f(X<205>); + void f(X<206>); + void f(X<207>); + void f(X<208>); + void f(X<209>); + void f(X<210>); + void f(X<211>); + void f(X<212>); + void f(X<213>); + void f(X<214>); + void f(X<215>); + void f(X<216>); + void f(X<217>); + void f(X<218>); + void f(X<219>); + void f(X<220>); + void f(X<221>); + void f(X<222>); + void f(X<223>); + void f(X<224>); + void f(X<225>); + void f(X<226>); + void f(X<227>); + void f(X<228>); + void f(X<229>); + void f(X<230>); + void f(X<231>); + void f(X<232>); + void f(X<233>); + void f(X<234>); + void f(X<235>); + void f(X<236>); + void f(X<237>); + void f(X<238>); + void f(X<239>); + void f(X<240>); + void f(X<241>); + void f(X<242>); + void f(X<243>); + void f(X<244>); + void f(X<245>); + void f(X<246>); + void f(X<247>); + void f(X<248>); + void f(X<249>); + void f(X<250>); + void f(X<251>); + void f(X<252>); + void f(X<253>); + void f(X<254>); + void f(X<255>); + void f(X<256>); + void f(X<257>); + void f(X<258>); + void f(X<259>); + void f(X<260>); + void f(X<261>); + void f(X<262>); + void f(X<263>); + void f(X<264>); + void f(X<265>); + void f(X<266>); + void f(X<267>); + void f(X<268>); + void f(X<269>); + void f(X<270>); + void f(X<271>); + void f(X<272>); + void f(X<273>); + void f(X<274>); + void f(X<275>); + void f(X<276>); + void f(X<277>); + void f(X<278>); + void f(X<279>); + void f(X<280>); + void f(X<281>); + void f(X<282>); + void f(X<283>); + void f(X<284>); + void f(X<285>); + void f(X<286>); + void f(X<287>); + void f(X<288>); + void f(X<289>); + void f(X<290>); + void f(X<291>); + void f(X<292>); + void f(X<293>); + void f(X<294>); + void f(X<295>); + void f(X<296>); + void f(X<297>); + void f(X<298>); + void f(X<299>); + void f(X<300>); + void f(X<301>); + void f(X<302>); + void f(X<303>); + void f(X<304>); + void f(X<305>); + void f(X<306>); + void f(X<307>); + void f(X<308>); + void f(X<309>); + void f(X<310>); + void f(X<311>); + void f(X<312>); + void f(X<313>); + void f(X<314>); + void f(X<315>); + void f(X<316>); + void f(X<317>); + void f(X<318>); + void f(X<319>); + void f(X<320>); + void f(X<321>); + void f(X<322>); + void f(X<323>); + void f(X<324>); + void f(X<325>); + void f(X<326>); + void f(X<327>); + void f(X<328>); + void f(X<329>); + void f(X<330>); + void f(X<331>); + void f(X<332>); + void f(X<333>); + void f(X<334>); + void f(X<335>); + void f(X<336>); + void f(X<337>); + void f(X<338>); + void f(X<339>); + void f(X<340>); + void f(X<341>); + void f(X<342>); + void f(X<343>); + void f(X<344>); + void f(X<345>); + void f(X<346>); + void f(X<347>); + void f(X<348>); + void f(X<349>); + void f(X<350>); + void f(X<351>); + void f(X<352>); + void f(X<353>); + void f(X<354>); + void f(X<355>); + void f(X<356>); + void f(X<357>); + void f(X<358>); + void f(X<359>); + void f(X<360>); + void f(X<361>); + void f(X<362>); + void f(X<363>); + void f(X<364>); + void f(X<365>); + void f(X<366>); + void f(X<367>); + void f(X<368>); + void f(X<369>); + void f(X<370>); + void f(X<371>); + void f(X<372>); + void f(X<373>); + void f(X<374>); + void f(X<375>); + void f(X<376>); + void f(X<377>); + void f(X<378>); + void f(X<379>); + void f(X<380>); + void f(X<381>); + void f(X<382>); + void f(X<383>); + void f(X<384>); + void f(X<385>); + void f(X<386>); + void f(X<387>); + void f(X<388>); + void f(X<389>); + void f(X<390>); + void f(X<391>); + void f(X<392>); + void f(X<393>); + void f(X<394>); + void f(X<395>); + void f(X<396>); + void f(X<397>); + void f(X<398>); + void f(X<399>); + void f(X<400>); + void f(X<401>); + void f(X<402>); + void f(X<403>); + void f(X<404>); + void f(X<405>); + void f(X<406>); + void f(X<407>); + void f(X<408>); + void f(X<409>); + void f(X<410>); + void f(X<411>); + void f(X<412>); + void f(X<413>); + void f(X<414>); + void f(X<415>); + void f(X<416>); + void f(X<417>); + void f(X<418>); + void f(X<419>); + void f(X<420>); + void f(X<421>); + void f(X<422>); + void f(X<423>); + void f(X<424>); + void f(X<425>); + void f(X<426>); + void f(X<427>); + void f(X<428>); + void f(X<429>); + void f(X<430>); + void f(X<431>); + void f(X<432>); + void f(X<433>); + void f(X<434>); + void f(X<435>); + void f(X<436>); + void f(X<437>); + void f(X<438>); + void f(X<439>); + void f(X<440>); + void f(X<441>); + void f(X<442>); + void f(X<443>); + void f(X<444>); + void f(X<445>); + void f(X<446>); + void f(X<447>); + void f(X<448>); + void f(X<449>); + void f(X<450>); + void f(X<451>); + void f(X<452>); + void f(X<453>); + void f(X<454>); + void f(X<455>); + void f(X<456>); + void f(X<457>); + void f(X<458>); + void f(X<459>); + void f(X<460>); + void f(X<461>); + void f(X<462>); + void f(X<463>); + void f(X<464>); + void f(X<465>); + void f(X<466>); + void f(X<467>); + void f(X<468>); + void f(X<469>); + void f(X<470>); + void f(X<471>); + void f(X<472>); + void f(X<473>); + void f(X<474>); + void f(X<475>); + void f(X<476>); + void f(X<477>); + void f(X<478>); + void f(X<479>); + void f(X<480>); + void f(X<481>); + void f(X<482>); + void f(X<483>); + void f(X<484>); + void f(X<485>); + void f(X<486>); + void f(X<487>); + void f(X<488>); + void f(X<489>); + void f(X<490>); + void f(X<491>); + void f(X<492>); + void f(X<493>); + void f(X<494>); + void f(X<495>); + void f(X<496>); + void f(X<497>); + void f(X<498>); + void f(X<499>); + void f(X<500>); + void f(X<501>); + void f(X<502>); + void f(X<503>); + void f(X<504>); + void f(X<505>); + void f(X<506>); + void f(X<507>); + void f(X<508>); + void f(X<509>); + void f(X<510>); + void f(X<511>); + void f(X<512>); + void f(X<513>); + void f(X<514>); + void f(X<515>); + void f(X<516>); + void f(X<517>); + void f(X<518>); + void f(X<519>); + void f(X<520>); + void f(X<521>); + void f(X<522>); + void f(X<523>); + void f(X<524>); + void f(X<525>); + void f(X<526>); + void f(X<527>); + void f(X<528>); + void f(X<529>); + void f(X<530>); + void f(X<531>); + void f(X<532>); + void f(X<533>); + void f(X<534>); + void f(X<535>); + void f(X<536>); + void f(X<537>); + void f(X<538>); + void f(X<539>); + void f(X<540>); + void f(X<541>); + void f(X<542>); + void f(X<543>); + void f(X<544>); + void f(X<545>); + void f(X<546>); + void f(X<547>); + void f(X<548>); + void f(X<549>); + void f(X<550>); + void f(X<551>); + void f(X<552>); + void f(X<553>); + void f(X<554>); + void f(X<555>); + void f(X<556>); + void f(X<557>); + void f(X<558>); + void f(X<559>); + void f(X<560>); + void f(X<561>); + void f(X<562>); + void f(X<563>); + void f(X<564>); + void f(X<565>); + void f(X<566>); + void f(X<567>); + void f(X<568>); + void f(X<569>); + void f(X<570>); + void f(X<571>); + void f(X<572>); + void f(X<573>); + void f(X<574>); + void f(X<575>); + void f(X<576>); + void f(X<577>); + void f(X<578>); + void f(X<579>); + void f(X<580>); + void f(X<581>); + void f(X<582>); + void f(X<583>); + void f(X<584>); + void f(X<585>); + void f(X<586>); + void f(X<587>); + void f(X<588>); + void f(X<589>); + void f(X<590>); + void f(X<591>); + void f(X<592>); + void f(X<593>); + void f(X<594>); + void f(X<595>); + void f(X<596>); + void f(X<597>); + void f(X<598>); + void f(X<599>); + void f(X<600>); + void f(X<601>); + void f(X<602>); + void f(X<603>); + void f(X<604>); + void f(X<605>); + void f(X<606>); + void f(X<607>); + void f(X<608>); + void f(X<609>); + void f(X<610>); + void f(X<611>); + void f(X<612>); + void f(X<613>); + void f(X<614>); + void f(X<615>); + void f(X<616>); + void f(X<617>); + void f(X<618>); + void f(X<619>); + void f(X<620>); + void f(X<621>); + void f(X<622>); + void f(X<623>); + void f(X<624>); + void f(X<625>); + void f(X<626>); + void f(X<627>); + void f(X<628>); + void f(X<629>); + void f(X<630>); + void f(X<631>); + void f(X<632>); + void f(X<633>); + void f(X<634>); + void f(X<635>); + void f(X<636>); + void f(X<637>); + void f(X<638>); + void f(X<639>); + void f(X<640>); + void f(X<641>); + void f(X<642>); + void f(X<643>); + void f(X<644>); + void f(X<645>); + void f(X<646>); + void f(X<647>); + void f(X<648>); + void f(X<649>); + void f(X<650>); + void f(X<651>); + void f(X<652>); + void f(X<653>); + void f(X<654>); + void f(X<655>); + void f(X<656>); + void f(X<657>); + void f(X<658>); + void f(X<659>); + void f(X<660>); + void f(X<661>); + void f(X<662>); + void f(X<663>); + void f(X<664>); + void f(X<665>); + void f(X<666>); + void f(X<667>); + void f(X<668>); + void f(X<669>); + void f(X<670>); + void f(X<671>); + void f(X<672>); + void f(X<673>); + void f(X<674>); + void f(X<675>); + void f(X<676>); + void f(X<677>); + void f(X<678>); + void f(X<679>); + void f(X<680>); + void f(X<681>); + void f(X<682>); + void f(X<683>); + void f(X<684>); + void f(X<685>); + void f(X<686>); + void f(X<687>); + void f(X<688>); + void f(X<689>); + void f(X<690>); + void f(X<691>); + void f(X<692>); + void f(X<693>); + void f(X<694>); + void f(X<695>); + void f(X<696>); + void f(X<697>); + void f(X<698>); + void f(X<699>); + void f(X<700>); + void f(X<701>); + void f(X<702>); + void f(X<703>); + void f(X<704>); + void f(X<705>); + void f(X<706>); + void f(X<707>); + void f(X<708>); + void f(X<709>); + void f(X<710>); + void f(X<711>); + void f(X<712>); + void f(X<713>); + void f(X<714>); + void f(X<715>); + void f(X<716>); + void f(X<717>); + void f(X<718>); + void f(X<719>); + void f(X<720>); + void f(X<721>); + void f(X<722>); + void f(X<723>); + void f(X<724>); + void f(X<725>); + void f(X<726>); + void f(X<727>); + void f(X<728>); + void f(X<729>); + void f(X<730>); + void f(X<731>); + void f(X<732>); + void f(X<733>); + void f(X<734>); + void f(X<735>); + void f(X<736>); + void f(X<737>); + void f(X<738>); + void f(X<739>); + void f(X<740>); + void f(X<741>); + void f(X<742>); + void f(X<743>); + void f(X<744>); + void f(X<745>); + void f(X<746>); + void f(X<747>); + void f(X<748>); + void f(X<749>); + void f(X<750>); + void f(X<751>); + void f(X<752>); + void f(X<753>); + void f(X<754>); + void f(X<755>); + void f(X<756>); + void f(X<757>); + void f(X<758>); + void f(X<759>); + void f(X<760>); + void f(X<761>); + void f(X<762>); + void f(X<763>); + void f(X<764>); + void f(X<765>); + void f(X<766>); + void f(X<767>); + void f(X<768>); + void f(X<769>); + void f(X<770>); + void f(X<771>); + void f(X<772>); + void f(X<773>); + void f(X<774>); + void f(X<775>); + void f(X<776>); + void f(X<777>); + void f(X<778>); + void f(X<779>); + void f(X<780>); + void f(X<781>); + void f(X<782>); + void f(X<783>); + void f(X<784>); + void f(X<785>); + void f(X<786>); + void f(X<787>); + void f(X<788>); + void f(X<789>); + void f(X<790>); + void f(X<791>); + void f(X<792>); + void f(X<793>); + void f(X<794>); + void f(X<795>); + void f(X<796>); + void f(X<797>); + void f(X<798>); + void f(X<799>); + void f(X<800>); + void f(X<801>); + void f(X<802>); + void f(X<803>); + void f(X<804>); + void f(X<805>); + void f(X<806>); + void f(X<807>); + void f(X<808>); + void f(X<809>); + void f(X<810>); + void f(X<811>); + void f(X<812>); + void f(X<813>); + void f(X<814>); + void f(X<815>); + void f(X<816>); + void f(X<817>); + void f(X<818>); + void f(X<819>); + void f(X<820>); + void f(X<821>); + void f(X<822>); + void f(X<823>); + void f(X<824>); + void f(X<825>); + void f(X<826>); + void f(X<827>); + void f(X<828>); + void f(X<829>); + void f(X<830>); + void f(X<831>); + void f(X<832>); + void f(X<833>); + void f(X<834>); + void f(X<835>); + void f(X<836>); + void f(X<837>); + void f(X<838>); + void f(X<839>); + void f(X<840>); + void f(X<841>); + void f(X<842>); + void f(X<843>); + void f(X<844>); + void f(X<845>); + void f(X<846>); + void f(X<847>); + void f(X<848>); + void f(X<849>); + void f(X<850>); + void f(X<851>); + void f(X<852>); + void f(X<853>); + void f(X<854>); + void f(X<855>); + void f(X<856>); + void f(X<857>); + void f(X<858>); + void f(X<859>); + void f(X<860>); + void f(X<861>); + void f(X<862>); + void f(X<863>); + void f(X<864>); + void f(X<865>); + void f(X<866>); + void f(X<867>); + void f(X<868>); + void f(X<869>); + void f(X<870>); + void f(X<871>); + void f(X<872>); + void f(X<873>); + void f(X<874>); + void f(X<875>); + void f(X<876>); + void f(X<877>); + void f(X<878>); + void f(X<879>); + void f(X<880>); + void f(X<881>); + void f(X<882>); + void f(X<883>); + void f(X<884>); + void f(X<885>); + void f(X<886>); + void f(X<887>); + void f(X<888>); + void f(X<889>); + void f(X<890>); + void f(X<891>); + void f(X<892>); + void f(X<893>); + void f(X<894>); + void f(X<895>); + void f(X<896>); + void f(X<897>); + void f(X<898>); + void f(X<899>); + void f(X<900>); + void f(X<901>); + void f(X<902>); + void f(X<903>); + void f(X<904>); + void f(X<905>); + void f(X<906>); + void f(X<907>); + void f(X<908>); + void f(X<909>); + void f(X<910>); + void f(X<911>); + void f(X<912>); + void f(X<913>); + void f(X<914>); + void f(X<915>); + void f(X<916>); + void f(X<917>); + void f(X<918>); + void f(X<919>); + void f(X<920>); + void f(X<921>); + void f(X<922>); + void f(X<923>); + void f(X<924>); + void f(X<925>); + void f(X<926>); + void f(X<927>); + void f(X<928>); + void f(X<929>); + void f(X<930>); + void f(X<931>); + void f(X<932>); + void f(X<933>); + void f(X<934>); + void f(X<935>); + void f(X<936>); + void f(X<937>); + void f(X<938>); + void f(X<939>); + void f(X<940>); + void f(X<941>); + void f(X<942>); + void f(X<943>); + void f(X<944>); + void f(X<945>); + void f(X<946>); + void f(X<947>); + void f(X<948>); + void f(X<949>); + void f(X<950>); + void f(X<951>); + void f(X<952>); + void f(X<953>); + void f(X<954>); + void f(X<955>); + void f(X<956>); + void f(X<957>); + void f(X<958>); + void f(X<959>); + void f(X<960>); + void f(X<961>); + void f(X<962>); + void f(X<963>); + void f(X<964>); + void f(X<965>); + void f(X<966>); + void f(X<967>); + void f(X<968>); + void f(X<969>); + void f(X<970>); + void f(X<971>); + void f(X<972>); + void f(X<973>); + void f(X<974>); + void f(X<975>); + void f(X<976>); + void f(X<977>); + void f(X<978>); + void f(X<979>); + void f(X<980>); + void f(X<981>); + void f(X<982>); + void f(X<983>); + void f(X<984>); + void f(X<985>); + void f(X<986>); + void f(X<987>); + void f(X<988>); + void f(X<989>); + void f(X<990>); + void f(X<991>); + void f(X<992>); + void f(X<993>); + void f(X<994>); + void f(X<995>); + void f(X<996>); + void f(X<997>); + void f(X<998>); + void f(X<999>); + void f(X<1000>); + void f(X<1001>); + void f(X<1002>); + void f(X<1003>); + void f(X<1004>); + void f(X<1005>); + void f(X<1006>); + void f(X<1007>); + void f(X<1008>); + void f(X<1009>); + void f(X<1010>); + void f(X<1011>); + void f(X<1012>); + void f(X<1013>); + void f(X<1014>); + void f(X<1015>); + void f(X<1016>); + void f(X<1017>); + void f(X<1018>); + void f(X<1019>); + void f(X<1020>); + void f(X<1021>); + void f(X<1022>); + void f(X<1023>); + void f(X<1024>); + void f(X<1025>); + void f(X<1026>); + void f(X<1027>); + void f(X<1028>); + void f(X<1029>); + void f(X<1030>); + void f(X<1031>); + void f(X<1032>); + void f(X<1033>); + void f(X<1034>); + void f(X<1035>); + void f(X<1036>); + void f(X<1037>); + void f(X<1038>); + void f(X<1039>); + void f(X<1040>); + void f(X<1041>); + void f(X<1042>); + void f(X<1043>); + void f(X<1044>); + void f(X<1045>); + void f(X<1046>); + void f(X<1047>); + void f(X<1048>); + void f(X<1049>); + void f(X<1050>); + void f(X<1051>); + void f(X<1052>); + void f(X<1053>); + void f(X<1054>); + void f(X<1055>); + void f(X<1056>); + void f(X<1057>); + void f(X<1058>); + void f(X<1059>); + void f(X<1060>); + void f(X<1061>); + void f(X<1062>); + void f(X<1063>); + void f(X<1064>); + void f(X<1065>); + void f(X<1066>); + void f(X<1067>); + void f(X<1068>); + void f(X<1069>); + void f(X<1070>); + void f(X<1071>); + void f(X<1072>); + void f(X<1073>); + void f(X<1074>); + void f(X<1075>); + void f(X<1076>); + void f(X<1077>); + void f(X<1078>); + void f(X<1079>); + void f(X<1080>); + void f(X<1081>); + void f(X<1082>); + void f(X<1083>); + void f(X<1084>); + void f(X<1085>); + void f(X<1086>); + void f(X<1087>); + void f(X<1088>); + void f(X<1089>); + void f(X<1090>); + void f(X<1091>); + void f(X<1092>); + void f(X<1093>); + void f(X<1094>); + void f(X<1095>); + void f(X<1096>); + void f(X<1097>); + void f(X<1098>); + void f(X<1099>); + void f(X<1100>); + void f(X<1101>); + void f(X<1102>); + void f(X<1103>); + void f(X<1104>); + void f(X<1105>); + void f(X<1106>); + void f(X<1107>); + void f(X<1108>); + void f(X<1109>); + void f(X<1110>); + void f(X<1111>); + void f(X<1112>); + void f(X<1113>); + void f(X<1114>); + void f(X<1115>); + void f(X<1116>); + void f(X<1117>); + void f(X<1118>); + void f(X<1119>); + void f(X<1120>); + void f(X<1121>); + void f(X<1122>); + void f(X<1123>); + void f(X<1124>); + void f(X<1125>); + void f(X<1126>); + void f(X<1127>); + void f(X<1128>); + void f(X<1129>); + void f(X<1130>); + void f(X<1131>); + void f(X<1132>); + void f(X<1133>); + void f(X<1134>); + void f(X<1135>); + void f(X<1136>); + void f(X<1137>); + void f(X<1138>); + void f(X<1139>); + void f(X<1140>); + void f(X<1141>); + void f(X<1142>); + void f(X<1143>); + void f(X<1144>); + void f(X<1145>); + void f(X<1146>); + void f(X<1147>); + void f(X<1148>); + void f(X<1149>); + void f(X<1150>); + void f(X<1151>); + void f(X<1152>); + void f(X<1153>); + void f(X<1154>); + void f(X<1155>); + void f(X<1156>); + void f(X<1157>); + void f(X<1158>); + void f(X<1159>); + void f(X<1160>); + void f(X<1161>); + void f(X<1162>); + void f(X<1163>); + void f(X<1164>); + void f(X<1165>); + void f(X<1166>); + void f(X<1167>); + void f(X<1168>); + void f(X<1169>); + void f(X<1170>); + void f(X<1171>); + void f(X<1172>); + void f(X<1173>); + void f(X<1174>); + void f(X<1175>); + void f(X<1176>); + void f(X<1177>); + void f(X<1178>); + void f(X<1179>); + void f(X<1180>); + void f(X<1181>); + void f(X<1182>); + void f(X<1183>); + void f(X<1184>); + void f(X<1185>); + void f(X<1186>); + void f(X<1187>); + void f(X<1188>); + void f(X<1189>); + void f(X<1190>); + void f(X<1191>); + void f(X<1192>); + void f(X<1193>); + void f(X<1194>); + void f(X<1195>); + void f(X<1196>); + void f(X<1197>); + void f(X<1198>); + void f(X<1199>); + void f(X<1200>); + void f(X<1201>); + void f(X<1202>); + void f(X<1203>); + void f(X<1204>); + void f(X<1205>); + void f(X<1206>); + void f(X<1207>); + void f(X<1208>); + void f(X<1209>); + void f(X<1210>); + void f(X<1211>); + void f(X<1212>); + void f(X<1213>); + void f(X<1214>); + void f(X<1215>); + void f(X<1216>); + void f(X<1217>); + void f(X<1218>); + void f(X<1219>); + void f(X<1220>); + void f(X<1221>); + void f(X<1222>); + void f(X<1223>); + void f(X<1224>); + void f(X<1225>); + void f(X<1226>); + void f(X<1227>); + void f(X<1228>); + void f(X<1229>); + void f(X<1230>); + void f(X<1231>); + void f(X<1232>); + void f(X<1233>); + void f(X<1234>); + void f(X<1235>); + void f(X<1236>); + void f(X<1237>); + void f(X<1238>); + void f(X<1239>); + void f(X<1240>); + void f(X<1241>); + void f(X<1242>); + void f(X<1243>); + void f(X<1244>); + void f(X<1245>); + void f(X<1246>); + void f(X<1247>); + void f(X<1248>); + void f(X<1249>); + void f(X<1250>); + void f(X<1251>); + void f(X<1252>); + void f(X<1253>); + void f(X<1254>); + void f(X<1255>); + void f(X<1256>); + void f(X<1257>); + void f(X<1258>); + void f(X<1259>); + void f(X<1260>); + void f(X<1261>); + void f(X<1262>); + void f(X<1263>); + void f(X<1264>); + void f(X<1265>); + void f(X<1266>); + void f(X<1267>); + void f(X<1268>); + void f(X<1269>); + void f(X<1270>); + void f(X<1271>); + void f(X<1272>); + void f(X<1273>); + void f(X<1274>); + void f(X<1275>); + void f(X<1276>); + void f(X<1277>); + void f(X<1278>); + void f(X<1279>); + void f(X<1280>); + void f(X<1281>); + void f(X<1282>); + void f(X<1283>); + void f(X<1284>); + void f(X<1285>); + void f(X<1286>); + void f(X<1287>); + void f(X<1288>); + void f(X<1289>); + void f(X<1290>); + void f(X<1291>); + void f(X<1292>); + void f(X<1293>); + void f(X<1294>); + void f(X<1295>); + void f(X<1296>); + void f(X<1297>); + void f(X<1298>); + void f(X<1299>); + void f(X<1300>); + void f(X<1301>); + void f(X<1302>); + void f(X<1303>); + void f(X<1304>); + void f(X<1305>); + void f(X<1306>); + void f(X<1307>); + void f(X<1308>); + void f(X<1309>); + void f(X<1310>); + void f(X<1311>); + void f(X<1312>); + void f(X<1313>); + void f(X<1314>); + void f(X<1315>); + void f(X<1316>); + void f(X<1317>); + void f(X<1318>); + void f(X<1319>); + void f(X<1320>); + void f(X<1321>); + void f(X<1322>); + void f(X<1323>); + void f(X<1324>); + void f(X<1325>); + void f(X<1326>); + void f(X<1327>); + void f(X<1328>); + void f(X<1329>); + void f(X<1330>); + void f(X<1331>); + void f(X<1332>); + void f(X<1333>); + void f(X<1334>); + void f(X<1335>); + void f(X<1336>); + void f(X<1337>); + void f(X<1338>); + void f(X<1339>); + void f(X<1340>); + void f(X<1341>); + void f(X<1342>); + void f(X<1343>); + void f(X<1344>); + void f(X<1345>); + void f(X<1346>); + void f(X<1347>); + void f(X<1348>); + void f(X<1349>); + void f(X<1350>); + void f(X<1351>); + void f(X<1352>); + void f(X<1353>); + void f(X<1354>); + void f(X<1355>); + void f(X<1356>); + void f(X<1357>); + void f(X<1358>); + void f(X<1359>); + void f(X<1360>); + void f(X<1361>); + void f(X<1362>); + void f(X<1363>); + void f(X<1364>); + void f(X<1365>); + void f(X<1366>); + void f(X<1367>); + void f(X<1368>); + void f(X<1369>); + void f(X<1370>); + void f(X<1371>); + void f(X<1372>); + void f(X<1373>); + void f(X<1374>); + void f(X<1375>); + void f(X<1376>); + void f(X<1377>); + void f(X<1378>); + void f(X<1379>); + void f(X<1380>); + void f(X<1381>); + void f(X<1382>); + void f(X<1383>); + void f(X<1384>); + void f(X<1385>); + void f(X<1386>); + void f(X<1387>); + void f(X<1388>); + void f(X<1389>); + void f(X<1390>); + void f(X<1391>); + void f(X<1392>); + void f(X<1393>); + void f(X<1394>); + void f(X<1395>); + void f(X<1396>); + void f(X<1397>); + void f(X<1398>); + void f(X<1399>); + void f(X<1400>); + void f(X<1401>); + void f(X<1402>); + void f(X<1403>); + void f(X<1404>); + void f(X<1405>); + void f(X<1406>); + void f(X<1407>); + void f(X<1408>); + void f(X<1409>); + void f(X<1410>); + void f(X<1411>); + void f(X<1412>); + void f(X<1413>); + void f(X<1414>); + void f(X<1415>); + void f(X<1416>); + void f(X<1417>); + void f(X<1418>); + void f(X<1419>); + void f(X<1420>); + void f(X<1421>); + void f(X<1422>); + void f(X<1423>); + void f(X<1424>); + void f(X<1425>); + void f(X<1426>); + void f(X<1427>); + void f(X<1428>); + void f(X<1429>); + void f(X<1430>); + void f(X<1431>); + void f(X<1432>); + void f(X<1433>); + void f(X<1434>); + void f(X<1435>); + void f(X<1436>); + void f(X<1437>); + void f(X<1438>); + void f(X<1439>); + void f(X<1440>); + void f(X<1441>); + void f(X<1442>); + void f(X<1443>); + void f(X<1444>); + void f(X<1445>); + void f(X<1446>); + void f(X<1447>); + void f(X<1448>); + void f(X<1449>); + void f(X<1450>); + void f(X<1451>); + void f(X<1452>); + void f(X<1453>); + void f(X<1454>); + void f(X<1455>); + void f(X<1456>); + void f(X<1457>); + void f(X<1458>); + void f(X<1459>); + void f(X<1460>); + void f(X<1461>); + void f(X<1462>); + void f(X<1463>); + void f(X<1464>); + void f(X<1465>); + void f(X<1466>); + void f(X<1467>); + void f(X<1468>); + void f(X<1469>); + void f(X<1470>); + void f(X<1471>); + void f(X<1472>); + void f(X<1473>); + void f(X<1474>); + void f(X<1475>); + void f(X<1476>); + void f(X<1477>); + void f(X<1478>); + void f(X<1479>); + void f(X<1480>); + void f(X<1481>); + void f(X<1482>); + void f(X<1483>); + void f(X<1484>); + void f(X<1485>); + void f(X<1486>); + void f(X<1487>); + void f(X<1488>); + void f(X<1489>); + void f(X<1490>); + void f(X<1491>); + void f(X<1492>); + void f(X<1493>); + void f(X<1494>); + void f(X<1495>); + void f(X<1496>); + void f(X<1497>); + void f(X<1498>); + void f(X<1499>); + void f(X<1500>); + void f(X<1501>); + void f(X<1502>); + void f(X<1503>); + void f(X<1504>); + void f(X<1505>); + void f(X<1506>); + void f(X<1507>); + void f(X<1508>); + void f(X<1509>); + void f(X<1510>); + void f(X<1511>); + void f(X<1512>); + void f(X<1513>); + void f(X<1514>); + void f(X<1515>); + void f(X<1516>); + void f(X<1517>); + void f(X<1518>); + void f(X<1519>); + void f(X<1520>); + void f(X<1521>); + void f(X<1522>); + void f(X<1523>); + void f(X<1524>); + void f(X<1525>); + void f(X<1526>); + void f(X<1527>); + void f(X<1528>); + void f(X<1529>); + void f(X<1530>); + void f(X<1531>); + void f(X<1532>); + void f(X<1533>); + void f(X<1534>); + void f(X<1535>); + void f(X<1536>); + void f(X<1537>); + void f(X<1538>); + void f(X<1539>); + void f(X<1540>); + void f(X<1541>); + void f(X<1542>); + void f(X<1543>); + void f(X<1544>); + void f(X<1545>); + void f(X<1546>); + void f(X<1547>); + void f(X<1548>); + void f(X<1549>); + void f(X<1550>); + void f(X<1551>); + void f(X<1552>); + void f(X<1553>); + void f(X<1554>); + void f(X<1555>); + void f(X<1556>); + void f(X<1557>); + void f(X<1558>); + void f(X<1559>); + void f(X<1560>); + void f(X<1561>); + void f(X<1562>); + void f(X<1563>); + void f(X<1564>); + void f(X<1565>); + void f(X<1566>); + void f(X<1567>); + void f(X<1568>); + void f(X<1569>); + void f(X<1570>); + void f(X<1571>); + void f(X<1572>); + void f(X<1573>); + void f(X<1574>); + void f(X<1575>); + void f(X<1576>); + void f(X<1577>); + void f(X<1578>); + void f(X<1579>); + void f(X<1580>); + void f(X<1581>); + void f(X<1582>); + void f(X<1583>); + void f(X<1584>); + void f(X<1585>); + void f(X<1586>); + void f(X<1587>); + void f(X<1588>); + void f(X<1589>); + void f(X<1590>); + void f(X<1591>); + void f(X<1592>); + void f(X<1593>); + void f(X<1594>); + void f(X<1595>); + void f(X<1596>); + void f(X<1597>); + void f(X<1598>); + void f(X<1599>); + void f(X<1600>); + void f(X<1601>); + void f(X<1602>); + void f(X<1603>); + void f(X<1604>); + void f(X<1605>); + void f(X<1606>); + void f(X<1607>); + void f(X<1608>); + void f(X<1609>); + void f(X<1610>); + void f(X<1611>); + void f(X<1612>); + void f(X<1613>); + void f(X<1614>); + void f(X<1615>); + void f(X<1616>); + void f(X<1617>); + void f(X<1618>); + void f(X<1619>); + void f(X<1620>); + void f(X<1621>); + void f(X<1622>); + void f(X<1623>); + void f(X<1624>); + void f(X<1625>); + void f(X<1626>); + void f(X<1627>); + void f(X<1628>); + void f(X<1629>); + void f(X<1630>); + void f(X<1631>); + void f(X<1632>); + void f(X<1633>); + void f(X<1634>); + void f(X<1635>); + void f(X<1636>); + void f(X<1637>); + void f(X<1638>); + void f(X<1639>); + void f(X<1640>); + void f(X<1641>); + void f(X<1642>); + void f(X<1643>); + void f(X<1644>); + void f(X<1645>); + void f(X<1646>); + void f(X<1647>); + void f(X<1648>); + void f(X<1649>); + void f(X<1650>); + void f(X<1651>); + void f(X<1652>); + void f(X<1653>); + void f(X<1654>); + void f(X<1655>); + void f(X<1656>); + void f(X<1657>); + void f(X<1658>); + void f(X<1659>); + void f(X<1660>); + void f(X<1661>); + void f(X<1662>); + void f(X<1663>); + void f(X<1664>); + void f(X<1665>); + void f(X<1666>); + void f(X<1667>); + void f(X<1668>); + void f(X<1669>); + void f(X<1670>); + void f(X<1671>); + void f(X<1672>); + void f(X<1673>); + void f(X<1674>); + void f(X<1675>); + void f(X<1676>); + void f(X<1677>); + void f(X<1678>); + void f(X<1679>); + void f(X<1680>); + void f(X<1681>); + void f(X<1682>); + void f(X<1683>); + void f(X<1684>); + void f(X<1685>); + void f(X<1686>); + void f(X<1687>); + void f(X<1688>); + void f(X<1689>); + void f(X<1690>); + void f(X<1691>); + void f(X<1692>); + void f(X<1693>); + void f(X<1694>); + void f(X<1695>); + void f(X<1696>); + void f(X<1697>); + void f(X<1698>); + void f(X<1699>); + void f(X<1700>); + void f(X<1701>); + void f(X<1702>); + void f(X<1703>); + void f(X<1704>); + void f(X<1705>); + void f(X<1706>); + void f(X<1707>); + void f(X<1708>); + void f(X<1709>); + void f(X<1710>); + void f(X<1711>); + void f(X<1712>); + void f(X<1713>); + void f(X<1714>); + void f(X<1715>); + void f(X<1716>); + void f(X<1717>); + void f(X<1718>); + void f(X<1719>); + void f(X<1720>); + void f(X<1721>); + void f(X<1722>); + void f(X<1723>); + void f(X<1724>); + void f(X<1725>); + void f(X<1726>); + void f(X<1727>); + void f(X<1728>); + void f(X<1729>); + void f(X<1730>); + void f(X<1731>); + void f(X<1732>); + void f(X<1733>); + void f(X<1734>); + void f(X<1735>); + void f(X<1736>); + void f(X<1737>); + void f(X<1738>); + void f(X<1739>); + void f(X<1740>); + void f(X<1741>); + void f(X<1742>); + void f(X<1743>); + void f(X<1744>); + void f(X<1745>); + void f(X<1746>); + void f(X<1747>); + void f(X<1748>); + void f(X<1749>); + void f(X<1750>); + void f(X<1751>); + void f(X<1752>); + void f(X<1753>); + void f(X<1754>); + void f(X<1755>); + void f(X<1756>); + void f(X<1757>); + void f(X<1758>); + void f(X<1759>); + void f(X<1760>); + void f(X<1761>); + void f(X<1762>); + void f(X<1763>); + void f(X<1764>); + void f(X<1765>); + void f(X<1766>); + void f(X<1767>); + void f(X<1768>); + void f(X<1769>); + void f(X<1770>); + void f(X<1771>); + void f(X<1772>); + void f(X<1773>); + void f(X<1774>); + void f(X<1775>); + void f(X<1776>); + void f(X<1777>); + void f(X<1778>); + void f(X<1779>); + void f(X<1780>); + void f(X<1781>); + void f(X<1782>); + void f(X<1783>); + void f(X<1784>); + void f(X<1785>); + void f(X<1786>); + void f(X<1787>); + void f(X<1788>); + void f(X<1789>); + void f(X<1790>); + void f(X<1791>); + void f(X<1792>); + void f(X<1793>); + void f(X<1794>); + void f(X<1795>); + void f(X<1796>); + void f(X<1797>); + void f(X<1798>); + void f(X<1799>); + void f(X<1800>); + void f(X<1801>); + void f(X<1802>); + void f(X<1803>); + void f(X<1804>); + void f(X<1805>); + void f(X<1806>); + void f(X<1807>); + void f(X<1808>); + void f(X<1809>); + void f(X<1810>); + void f(X<1811>); + void f(X<1812>); + void f(X<1813>); + void f(X<1814>); + void f(X<1815>); + void f(X<1816>); + void f(X<1817>); + void f(X<1818>); + void f(X<1819>); + void f(X<1820>); + void f(X<1821>); + void f(X<1822>); + void f(X<1823>); + void f(X<1824>); + void f(X<1825>); + void f(X<1826>); + void f(X<1827>); + void f(X<1828>); + void f(X<1829>); + void f(X<1830>); + void f(X<1831>); + void f(X<1832>); + void f(X<1833>); + void f(X<1834>); + void f(X<1835>); + void f(X<1836>); + void f(X<1837>); + void f(X<1838>); + void f(X<1839>); + void f(X<1840>); + void f(X<1841>); + void f(X<1842>); + void f(X<1843>); + void f(X<1844>); + void f(X<1845>); + void f(X<1846>); + void f(X<1847>); + void f(X<1848>); + void f(X<1849>); + void f(X<1850>); + void f(X<1851>); + void f(X<1852>); + void f(X<1853>); + void f(X<1854>); + void f(X<1855>); + void f(X<1856>); + void f(X<1857>); + void f(X<1858>); + void f(X<1859>); + void f(X<1860>); + void f(X<1861>); + void f(X<1862>); + void f(X<1863>); + void f(X<1864>); + void f(X<1865>); + void f(X<1866>); + void f(X<1867>); + void f(X<1868>); + void f(X<1869>); + void f(X<1870>); + void f(X<1871>); + void f(X<1872>); + void f(X<1873>); + void f(X<1874>); + void f(X<1875>); + void f(X<1876>); + void f(X<1877>); + void f(X<1878>); + void f(X<1879>); + void f(X<1880>); + void f(X<1881>); + void f(X<1882>); + void f(X<1883>); + void f(X<1884>); + void f(X<1885>); + void f(X<1886>); + void f(X<1887>); + void f(X<1888>); + void f(X<1889>); + void f(X<1890>); + void f(X<1891>); + void f(X<1892>); + void f(X<1893>); + void f(X<1894>); + void f(X<1895>); + void f(X<1896>); + void f(X<1897>); + void f(X<1898>); + void f(X<1899>); + void f(X<1900>); + void f(X<1901>); + void f(X<1902>); + void f(X<1903>); + void f(X<1904>); + void f(X<1905>); + void f(X<1906>); + void f(X<1907>); + void f(X<1908>); + void f(X<1909>); + void f(X<1910>); + void f(X<1911>); + void f(X<1912>); + void f(X<1913>); + void f(X<1914>); + void f(X<1915>); + void f(X<1916>); + void f(X<1917>); + void f(X<1918>); + void f(X<1919>); + void f(X<1920>); + void f(X<1921>); + void f(X<1922>); + void f(X<1923>); + void f(X<1924>); + void f(X<1925>); + void f(X<1926>); + void f(X<1927>); + void f(X<1928>); + void f(X<1929>); + void f(X<1930>); + void f(X<1931>); + void f(X<1932>); + void f(X<1933>); + void f(X<1934>); + void f(X<1935>); + void f(X<1936>); + void f(X<1937>); + void f(X<1938>); + void f(X<1939>); + void f(X<1940>); + void f(X<1941>); + void f(X<1942>); + void f(X<1943>); + void f(X<1944>); + void f(X<1945>); + void f(X<1946>); + void f(X<1947>); + void f(X<1948>); + void f(X<1949>); + void f(X<1950>); + void f(X<1951>); + void f(X<1952>); + void f(X<1953>); + void f(X<1954>); + void f(X<1955>); + void f(X<1956>); + void f(X<1957>); + void f(X<1958>); + void f(X<1959>); + void f(X<1960>); + void f(X<1961>); + void f(X<1962>); + void f(X<1963>); + void f(X<1964>); + void f(X<1965>); + void f(X<1966>); + void f(X<1967>); + void f(X<1968>); + void f(X<1969>); + void f(X<1970>); + void f(X<1971>); + void f(X<1972>); + void f(X<1973>); + void f(X<1974>); + void f(X<1975>); + void f(X<1976>); + void f(X<1977>); + void f(X<1978>); + void f(X<1979>); + void f(X<1980>); + void f(X<1981>); + void f(X<1982>); + void f(X<1983>); + void f(X<1984>); + void f(X<1985>); + void f(X<1986>); + void f(X<1987>); + void f(X<1988>); + void f(X<1989>); + void f(X<1990>); + void f(X<1991>); + void f(X<1992>); + void f(X<1993>); + void f(X<1994>); + void f(X<1995>); + void f(X<1996>); + void f(X<1997>); + void f(X<1998>); + void f(X<1999>); + void f(X<2000>); +} diff --git a/clang/test/Modules/Inputs/module.map b/clang/test/Modules/Inputs/module.map index 499dcba..2e6ef08 100644 --- a/clang/test/Modules/Inputs/module.map +++ b/clang/test/Modules/Inputs/module.map @@ -167,3 +167,7 @@ module weird_objc { module ignored_macros { header "ignored_macros.h" } + +module cxx_many_overloads { + header "cxx-many-overloads.h" +} diff --git a/clang/test/Modules/cxx-many-overloads.cpp b/clang/test/Modules/cxx-many-overloads.cpp new file mode 100644 index 0000000..84e4140 --- /dev/null +++ b/clang/test/Modules/cxx-many-overloads.cpp @@ -0,0 +1,9 @@ +// RUN: rm -rf %t +// RUN: %clang_cc1 -x objective-c++ -fmodules -fmodule-cache-path %t -I %S/Inputs %s -verify + +// expected-no-diagnostics +@import cxx_many_overloads; + +void g() { + f(N::X<0>()); +} -- 2.7.4