Feature (Language)-(Version which contains the problem)/(defect number)
(Title of Defect)
When contacting support for any issues, please specify the products full version
number: 2002.05.20.468.004
This section describes the whole set of noteworthy fixed problems in the v2002 Release 2 release.
When a function returns a value that is the result of a call to another function and compares it to another value, the instrumentor does not calculate the return type of the expression correctly resulting in a compilation error when the instrumented code is compiled. Example:
extern void*getElement(); int elementExists() { return (getElement()!=NULL); }
In this case the instrumentor thinks that the type of the expression returned is of type void* instead of int.
1) An enum declared in a structure is not accepted. 2) Trouble with types which become local variables inside a function and which have to persist as types after
function's return. 3) A ; followed by another ; is not accepted in a struct/union
When using the -O2 option on the gnu compiler the strchr() function is expanded to an inline macro using the __extension__ GNU keyword. If character parameter to strchr() is a parenthesis, '(' or ')', then the __extension__ keyword is not analyzed correctly by the instrumentor resulting in the following error message: gcc -E -O2 a.c > a.i attolcc1 a.i a.aug.c atct.def -PROC -COUNT TestRT attolcc1 - WARNING: Non terminated gnu __extension__ beginning at [a.c,7] TestRT attolcc1 - ERROR: syntax error near[a.c,12] TestRT attolcc clinuxgnu - ERROR: Error during code instrumentation
atostart supports now "mutable" keywords.
A line of code after a switch statement is shown in red, although covered.
The 'goto' keyword used in code causes a bad analysis of source and the coverage report shows some bad
results.
A structure which contains a large number of CASE/WHEN causes a core dump to the instrumentor.
Bad position of closing brace after asm() statement in if statement causes error in the instrumented
code when compiled.
The Ada instrumentor loops during the file analysis.
Usage of "-rename" command line option for void* functions causes illegal code generation.
In the reference manual under the topic of 'Pragma directives' there seems to be a mis-match between
the example and the actual directives. In the first example it has the following directive to illustrate how to do a dump: #pragma att_insert if ( a == 0 ) _ATT_DUMP_STACK however this would not work because it actually needs to be #pragma attol att_insert ... . Likewise the following after the example would also need to be fixed up This code will be replaced, after instrumentation, with the following line: /*#pragma att_insert*/ if ( a == 0 ) _ATT_DUMP_STACK Additionally I believe that the following syntax for use of the pragma directives should be changed
from it's existing: #pragmato #pragma attol as all of the pragma directives listed use #pragma attol ...
User Guide chapter Software Testing > Unit Testing > Unit Testing Scripts > Advanced Ada > Testing Tasks states (in the PTU example) for version 2002.05.20:TERMINATION #abort protected_array; END TERMINATIONThis can create a conflict when writing the SCI dump (especially if the task is calling
stubbed procedures). Therefore, we suggest terminating any task (i. e. its state
is "terminated") before reaching the "END ELEMENT" statement in the PTU. For more details see
the documentation for version 2002 Release 2.
The options to the instrumentor -SERVICE and -EXSERVICE are no longer supported by the instrumentor. These options have been replaced by the options "-UNIT" and "-EXUNIT".
By default, the supervisor connects to user interface using the IP address '127.0.0.1'. On some client machines this does not seem to work.
The Shared Library Path for Aix Operating system is not set by the testrtinit script
The ObjectTesting Wizard generates mangled names in return statements of STUBs. For example it generates #return Success__5cLift; instead of #return cLift::Success;
Instrumentor generates an inline function to test an object even though the size of the object is unknown. This causes an error when the instrumented code is compiled.
With the following type of code the instrumentor for PurifyLT does not generate correct code to track the variables and compilation errors occur: struct TESTSTRUCT { float x,y; }; TESTSTRUCT dataArray[6];
The instrumentor does not generate the "struct" keyword after the extern reference to a variable. Example: struct sqlca { char sqlcaid[8]; }; extern struct sqlca sqlca; _ATP_START_PARSE_GLOBALS extern sqlca sqlca; // Should read extern struct sqlca sqlca; _ATP_PARSE_GLOBAL(sqlca) _ATP_END_PARSE_GLOBALS
The path to the TP.o object contains a slash character. Some compilers consider this to be the start of a compiler option so the link step fails with an "unknown compiler option" error message.
When creating a new activity with the Wizard, the PTU is generated correctly, but the referenced header files
are not (all) listed in the Files view.
Absolute paths in settings may cause paths duplication.
The Build -> Options -> Stages menu which allows you to choose which steps of the build are to be performed is not operational.
In ats.c the function below does not convert any char into hexa. void ATS_CLP atl_hexa_image (...) { *hex1 = (value & 0xF0) + '0'; if (*hex1 > '9') *hex1 += ('A'-'0'); *hex2= (value & 0x0F) + '0'; if (*hex2 > '9') *hex2 += ('A'-'0'); }
Files attol_serv_dump.2.ada and attol.2.ada are not necessary.
The following code templateclass Test { public: template class Inner { public: int test_var; }; // Inner theInner; }; when instrumented with Trace produces code that does not compile.
Customer discovered problem in the code profiling generation before compilation that generates code
that is not compileable - it generates the following code: _ATT_INIT_ARRAY_ATTR_2(m_bgT,(BT *),2020) Where m_bgT is defined as: BT *m_bgT[20][20]; The macro for _ATT_INIT_ARRAY_ATTR_2 is defined as: _ATT_INIT_ARRAY_ATTR_2(a,t,s1,s2) and thus there appears to be a code generation error. The code that generates the _ATT_INIT_ARRAY_ATTR_2(m_bgT,(BT *),2020) should have created the line as: _ATT_INIT_ARRAY_ATTR_2(m_bgT,(BT *),20,20) Compiling the file generates the following error: ..\..\Bg.h(115) : warning C4003: not enough actual parameters for macro '_ATT_INIT_ARRAY_ATTR_2' ..\..\Bg.h(115) : error C2059: syntax error : ';' ..\..\Bg.h(115) : error C2065: '_att_iterator_2_m_bgT' : undeclared identifier ..\..\Bg.h(115) : error C2143: syntax error : missing ';' before ')' Evaluation using Visual C++ 6.0. Recreated based on sample code provided by customer (available in SR).
If the procedure's parameter is an access type, the generated ptu will contain a declaration only for the simple type.
The generated code uses a non-constraint type instead of (correctly) using the constrained sub-type.
The preprocessor generates a body for an abstract procedure in a stubbed package. This results in a compilation error during the compilation of the code generated from the test script.
The postprocessor loops with the following message: TestRT-W-STXERRTDC, Syntax error in the file . TDC desynchronization beetwen tdc and rio Error: problem during search of error messages INTERNERR
The generated PTU template will contain: #with PACK.INC; Inc being a separate procedure of Pack (and not a subpackage).
The "Additional Report Generation options" are not passed to the report generator. A modification to a file is necessary. Contact the technical support to have the updated file.
The option -ro on the Ada report generator is silently ignored. This option is nolonger supported you should export the report in HTML from the Test RealTime user interface.
Currently, declaring a parameterized Environment does not modify the generated code.
Generated code truncates user code from within a stub procedure.
Generated code violates [RM_83 3.9(2)]: Type-declaration following a body. This happens with type Attol_Uct_2 which is used for stub initializations.
Test script generator generates STRUCTURE statements for typedefs and the resulting test script fails when the preprocessor tries to analyze it.
If the stub call is fully qualified: <package>.<child_package>.procedure 1 => [etc...], then an error is generated during preprocessing.
When generating the code for a tagged type the following error message is raised: CASE overflow in the module generate_tagged_edv_list_recursive : bad type
Request for chopping generated VAR lines of PTU at around 80 characters in length
The analyzer specification source file targets\adaaonix\ana\ada95\system-storage_elements.ads contains the following line: with RTRT_Imp95; This causes the generated code to contain the same.
Under certain circumstances, a type may show up as variable in an Environment block.
Coverage results are now ouput into the file "atlout.spt" and in create mode. The file 'attolcov.tio' is created by calling the batch tool atlsplit on the 'atlout.spt' file. The default filename 'attolcov.tio' can still be changed using the "ATC_TRACES" environment variable. The test timestamp (line DT in the tio file) is written by the atlsplit tool and not anymore by the TDP.
The License Administration Guide document provided with the product refers to Rational Suite, but in fact also applies to Rational Test RealTime as well as other Rational Software products.
When writing stubs of functions that have extern "C" linkage. Component Testing for C++ may produce a warning message during the compilation of the test script. This warning message indicates: TestRT attolccp: warning: math.stb:25: return type does not match the function prototype > extern "C" int assertcsd(int i
The Component Testing for C++ Wizard does not generate appropriate stubs for static fields. If a stubbed class contains a static field, and this field is used by the test script and/or the tested source code, the linker will report an undefined reference to the static field. The workaround consists in adding manually the missing definition to the stub file (.stb), as shown in the example below: ##a_type stubbed_class::static_field;
Work-Around :
Add the line manually to the STB file.
On non-Microsoft TDP: If "Settings -> Runtime Analysis -> General -> Misc. Runtime Analysis Options -> C++ Analysis -> Instantiate all templates even if not used" is not checked (this is the default), AND if some methods defined within a template class are stubbed, AND if these methods are used in the code before the definition of the replacing stub is seen THEN these stubbed methods will not be instrumented by any of the Performance Profiling,
Memory Profiling, Code Coverage or Runtime Tracing features, nor by the OTC assertions.
This is usually not a problem with Performance Profiling, Memory Profiling,
Code Coverage or Runtime Tracing, because most of the time stubs are excluded from
these features' instrumentation. However it is a real defect regarding OTC assertions
because the stubs should be OTC-tested, since they are methods of a tested class.
When using the wizard to generate a test node based on a procedure only, the unit is not
shown in the dialogue to select the code under test.
Work-Around :
Press cancel within the wizard, go to the project window, select the
Asset view > "By File," select the file containing the procedure to be tested,
and click on the right mouse button. Select the "Test..." field.
The wizard will reopen, and this time the Unit under test is correctly selected.
Proceed as usual.
In the directory of intermediate files ( with TDP Name ), if you put a file which is needed for
execution ( ex: a dll ) if you make a clear all, this file will be deleted.
Work-Around :
Put in read only the file.
JVMPI classes are not filtered in the runtime tracing report. This affects all runtime tracing reports other than the one that is dynamically generated during application execution.
Work-Around :
JVMPI is only used by the memory profiling feature. When memory profiling is not performed, the JVMPI classes will not appear in a runtime tracing report.
Missing feature in the GUI.
Work-Around :
Deselect all tests one by one.
Running the GUI from a Solaris session displaying to a Exceed version 5.00 server running on
Windows 2000 causes the server to abort.
Work-Around :
Upgrade to Exceed 7.0 or later.
Limited choice of colors available for the GUI on HP-UX workstations running CDE on a 256 color display.
Work-Around :
Use the QtConfig tool to customize the color map.
On Unix and Windows, the by default Runtime Tracing printing functionality does not work correctly (when all the pages are selected for printing, only the first page is printed). This printing defect occurs only for the Runtime Tracing diagram.
Work-Around :
Select a range to print for example page 1 to 6.
Example : int test(p1, p2) int p1; char p2[4]; { int result = p1; int value = 0; value = f1(p2); result += f2 (value); return result; } A stub will be generated for f1 but not for f2. If the prototype exist, the stub will be generated.
Stubbing a function with the following prototype: DEFINE STUB adc_close_c #adc_Result_t func(const void * _in Data_Ptr); END DEFINE produces code that does not compile. NOTE: void can be replaced with any type except char which is handled differently.
Work-Around :
In the test script, create a new type as follows: #typedef const void * atl_void_const; and then define the stub as follows: DEFINE STUB adc_close_c #adc_Result_t adc_Qadc555Init(atl_void_const _in Data_Ptr); END DEFINE
Bad code generation when you have a macro calling itself : Example : C-File: DMTL_GLOB_STATE_1 dmtl_glob_state_1; H.-File: typedef struct { struct { u32 lv_rough_leak_susp :1; }bitfield; }DMTL_GLOB_STATE_1; PTU-File: VAR lv_rough_leak_susp, int, INIT = 1, EV =INIT the preprocessor expands lv_rough_leak_susp twice if the macro is defined like that: #define lv_rough_leak_susp dmtl_glob_state_1.bitfield.lv_rough_leak_susp In generated code you obtain : dmtl_glob_state_1.bitfield.dmtl_glob_state_1.bitfield.lv_rough_leak_susp = 1;
Work-Around :
In the test script, undefine the macro and use the normal C name of the field.
If .alk contains relative paths (with ".\"), the preprocessor does not accept the file.
Work-Around :
Generate the file with absolute paths, or without ".\", putting just the file name.
Report Generator does not accept the -RO command line option.
When using the '&' for giving instructions spanning more than one line, the error message gives the last line of this instruction as reference.