Hi Richard, We noticed a regression for this simple testing case: rm -rf tmp3 clang -cc1 -fimplicit-module-maps -x objective-c -fmodules -fmodules-cache-path=tmp3 -emit-obj standalone.c -I Inputs/ —> standalone.c:4:6: error: variable has incomplete type 'void' void foo __P(()); ^ standalone.c:4:9: error: expected ';' after top level declarator void foo __P(()); ^ ; 2 errors generated. clang -cc1 -fimplicit-module-maps -x objective-c -fmodules -fmodules-cache-path=tmp3 -emit-obj standalone.c -I Inputs/ —> This runs fine.
cat standalone.c #import "C.h" #import "A.h" void foo __P(()); cat Inputs/module.map module X { header "A.h" export * } // Y imports X, it also uses “__P” as a parameter name module Y { header "B.h" export * } // Z imports X and Y module Z { header "C.h” } cat Inputs/A.h #define __P(protos) () cat Inputs/B.h #import "A.h" #import "B2.h” cat Inputs/B2.h void test(int __P) { } cat Inputs/C.h #import "A.h" #import “B.h” r259901 causes the compiler to write out identifier “__P” without the macro information for module Y, which seems to be incorrect. Any suggestion on how to fix this? Why the 2nd run works is related to global index. Global Index only considers interesting identifiers, so it skips module Y when calling ModuleManager::visit. Cheers, Manman _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits