Home > User Support > CoverageMaster winAMS FAQ
Question:
When analyzing with CasePlayer2, an analysis error occurs at a line that accesses a structure/union member. How do I fix it?
Answer:
The cause is because there are members of type "nameless structure" or "nameless union" in the structure/union.
For example, when analyzing the source code below in CasePlayer2's advanced analysis mode, the analysis errors below occur at the line of * error occurs here.
typedef union {
struct {
unsigned char aaa;
unsigned short bbb;
unsigned long ccc;
};
unsigned char BYTE[20];
} UTable;
int test(int a)
{
UTable table;
if (a < 0) {
return -1;
}
table.aaa = 1; // * error occurs here
return a;
}
Creating-Documentation...
Analyzing C_source...
C:\SL1\SL1 0 Management\support\etc\FAQ\019_09\test\src\test.c
CasePlayer2-E-SYN: Name (aaa) is not declared.
C:\SL1\SL1 0 Management\support\etc\FAQ\019_09\test\src\test.c(18)
CasePlayer2-I-COMP: Error: 1 Warning: 0
Complete-Documentation-Generation.
Accessing members using an nameless structure is an extension introduced by GCC, so an analysis error will occur in CasePlayer2's default "ANSI-C" mode.
Solution
The error can be avoided by changing the CasePlayer2 C Source Language Setting to "GNU-C".
However, if instead you need to analyze in ANSI-C mode for some reason, you need to change the source code. Specifically, first in the structure definition portion. Specify the structure name as below (the name is arbitrary).
typedef union {
struct {
unsigned char aaa;
unsigned short bbb;
unsigned long ccc;
} ST; // * change here
unsigned char BYTE[20];
} UTable;
Also change the code where the structure is referenced to use the new structure name as below.
int test(int a)
{
UTable table;
if (a < 0) {
return -1;
}
table.ST.aaa = 1; // * change here
return a;
}
Other technical tips in GAIO's web site can be searched for using the links below.
Search key word link: Settings with CoverageMaster
Technical Tips Google Search