Modules: Suggestion on how to fix a regression caused by r259901
Manman via cfe-commits
cfe-commits at lists.llvm.org
Wed Sep 7 12:40:03 PDT 2016
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
More information about the cfe-commits
mailing list