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

Reply via email to