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.

Bug 122091 - Evaluation of preprocessor expression containing macro with empty body is not correct
Summary: Evaluation of preprocessor expression containing macro with empty body is not...
Status: VERIFIED FIXED
Alias: None
Product: cnd
Classification: Unclassified
Component: Code Model (show other bugs)
Version: 6.x
Hardware: All Solaris
: P1 blocker (vote)
Assignee: Vladimir Voskresensky
URL:
Keywords:
Depends on:
Blocks: 108501
  Show dependency tree
 
Reported: 2007-11-16 08:51 UTC by Alexander Simon
Modified: 2007-11-21 10:53 UTC (History)
0 users

See Also:
Issue Type: DEFECT
Exception Reporter:


Attachments
proposed patch (8.23 KB, text/plain)
2007-11-16 12:11 UTC, Vladimir Voskresensky
Details

Note You need to log in before you can comment on or make changes to this bug.
Description Alexander Simon 2007-11-16 08:51:25 UTC
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?
Comment 1 Alexander Simon 2007-11-16 09:05:55 UTC
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.
Comment 2 Vladimir Voskresensky 2007-11-16 11:16:07 UTC
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
Comment 3 Vladimir Voskresensky 2007-11-16 12:10:38 UTC
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")
Comment 4 Vladimir Voskresensky 2007-11-16 12:11:42 UTC
Created attachment 53108 [details]
proposed patch
Comment 5 Vladimir Voskresensky 2007-11-16 12:23:29 UTC
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
Comment 6 Vladimir Voskresensky 2007-11-16 12:31:06 UTC
+ 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
Comment 7 Vladimir Kvashin 2007-11-16 23:50:37 UTC
I've reviewed the fix.
I believe the fix is correct and safe.
Comment 8 Alexander Pepin 2007-11-18 21:07:14 UTC
verified in the trunk build 20071118
Comment 9 Vladimir Voskresensky 2007-11-19 14:02:16 UTC
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
Comment 10 Alexander Pepin 2007-11-21 10:53:15 UTC
verified in RC2 build (200711201000)