This Bugzilla instance is a read-only archive of historic NetBeans bug reports. To report a bug in NetBeans please follow the project's instructions for reporting issues.
Evaluation of preprocessor expression "not or" do not work. Add to arg.c following code: --------------- #if !(vax || u3b || u3b15 || u3b2 || i386 || sparc) #include "### No code for processor type ###" #endif --------------- Code is compilable by GNU & SUN compilers. For GNU collection code model is right (include directive is grey). For SUN collection code model is wrong (include directive is active). Difference in predefined system macros "i386" GNU C collection: i386=1 SUN C collection: i386 I do not know which subsystem get wrong information. I have two guess: 1. project system should get "i386=1" for SUN C collection 2. code model should interpret macros without value as true. P2 because wrong evaluating of such expression can produce absolutely wrong model. For example Open Solaris project. Note: SUN C++ collection has both macros: i386 ... i386=1 Is it right? Which macros will be used in code model?
Investigation shows that value of i386=1 for SUN C collection. Verify please list of predefined macros for SUN collections. I think that it is P1 for Sun Studio.
simplified test case: #define A #if !(A || B) int a; #endif The problem caused by expanding token stream process. When expanding is performed for pp-expressions => all defined macro must be "1"-number token assigned on expanding, not empty token stream as it's usually expanded in code
we need a mode of expanding stream for preprocessor expressions. in this mode all defined macros with empty body are expanded to default body (token number "1")
Created attachment 53108 [details] proposed patch
fixed: - when preproc expression is expanded all empty-body macros must be expanded with default body cvs log: Checking in impl/support/APTBaseMacroMap.java; /shared/data/ccvs/repository/cnd/apt/src/org/netbeans/modules/cnd/apt/impl/support/APTBaseMacroMap.java,v <-- APTBaseMacroMap.java new revision: 1.12; previous revision: 1.11 done Checking in support/APTConditionResolver.java; /shared/data/ccvs/repository/cnd/apt/src/org/netbeans/modules/cnd/apt/support/APTConditionResolver.java,v <-- APTConditionResolver.java new revision: 1.4; previous revision: 1.3 done Checking in support/APTExpandedStream.java; /shared/data/ccvs/repository/cnd/apt/src/org/netbeans/modules/cnd/apt/support/APTExpandedStream.java,v <-- APTExpandedStream.java new revision: 1.4; previous revision: 1.3 done Checking in utils/APTUtils.java; /shared/data/ccvs/repository/cnd/apt/src/org/netbeans/modules/cnd/apt/utils/APTUtils.java,v <-- APTUtils.java new revision: 1.16; previous revision: 1.15 done
+ test cvs log: Checking in data/goldenfiles/org/netbeans/modules/cnd/modelimpl/trace/FileModelTest/ppExpressionAndEmptyBodyMacro.cc.err; /shared/data/ccvs/repository/cnd/modelimpl/test/unit/data/goldenfiles/org/netbeans/modules/cnd/modelimpl/trace/FileModelTest/ppExpressionAndEmptyBodyMacro.cc.err,v <-- ppExpressionAndEmptyBodyMacro.cc.err initial revision: 1.1 done RCS file: /shared/data/ccvs/repository/cnd/modelimpl/test/unit/data/goldenfiles/org/netbeans/modules/cnd/modelimpl/trace/FileModelTest/ppExpressionAndEmptyBodyMacro.cc.dat,v done Checking in data/goldenfiles/org/netbeans/modules/cnd/modelimpl/trace/FileModelTest/ppExpressionAndEmptyBodyMacro.cc.dat; /shared/data/ccvs/repository/cnd/modelimpl/test/unit/data/goldenfiles/org/netbeans/modules/cnd/modelimpl/trace/FileModelTest/ppExpressionAndEmptyBodyMacro.cc.dat,v <-- ppExpressionAndEmptyBodyMacro.cc.dat initial revision: 1.1 done RCS file: /shared/data/ccvs/repository/cnd/modelimpl/test/unit/data/org/netbeans/modules/cnd/modelimpl/trace/FileModelTest/ppExpressionAndEmptyBodyMacro.cc,v done Checking in data/org/netbeans/modules/cnd/modelimpl/trace/FileModelTest/ppExpressionAndEmptyBodyMacro.cc; /shared/data/ccvs/repository/cnd/modelimpl/test/unit/data/org/netbeans/modules/cnd/modelimpl/trace/FileModelTest/ppExpressionAndEmptyBodyMacro.cc,v <-- ppExpressionAndEmptyBodyMacro.cc initial revision: 1.1 done Checking in src/org/netbeans/modules/cnd/modelimpl/trace/FileModelTest.java; /shared/data/ccvs/repository/cnd/modelimpl/test/unit/src/org/netbeans/modules/cnd/modelimpl/trace/FileModelTest.java,v <-- FileModelTest.java new revision: 1.22; previous revision: 1.21 done
I've reviewed the fix. I believe the fix is correct and safe.
verified in the trunk build 20071118
integrated into release60: Checking in impl/support/APTBaseMacroMap.java; /shared/data/ccvs/repository/cnd/apt/src/org/netbeans/modules/cnd/apt/impl/support/APTBaseMacroMap.java,v <-- APTBaseMacroMap.java new revision: 1.11.6.1; previous revision: 1.11 done Checking in support/APTConditionResolver.java; /shared/data/ccvs/repository/cnd/apt/src/org/netbeans/modules/cnd/apt/support/APTConditionResolver.java,v <-- APTConditionResolver.java new revision: 1.3.8.1; previous revision: 1.3 done Checking in support/APTExpandedStream.java; /shared/data/ccvs/repository/cnd/apt/src/org/netbeans/modules/cnd/apt/support/APTExpandedStream.java,v <-- APTExpandedStream.java new revision: 1.3.8.1; previous revision: 1.3 done Checking in utils/APTUtils.java; /shared/data/ccvs/repository/cnd/apt/src/org/netbeans/modules/cnd/apt/utils/APTUtils.java,v <-- APTUtils.java new revision: 1.15.2.1; previous revision: 1.15 done
verified in RC2 build (200711201000)