atan2f
function is called as atan2f(0.f, 0.f)
?--fpmode=fast
.--enum_is_int
.to_string
function in std::bitset
.--gnu
?aeabi_vec_ctor_nocookie_nodotr
even though it should not be called.--ltcg
option?--fpmode=ieee_no_fenv
option?ipa_nfuncs
).this pointer NULL
checks is not generated.#pragma diag_suppress
in a header to precompile, the pragma
statement is enabled when generating the precompiled header, but is not enabled when using the precompiled header.16
or 32
cannot be specified in __align
.-Otime -O3
and -Otime -O2
?--create_pch
.-I
option when using --create_pch
or --use_pch
?--split_sections
, functions coded in embedded assembly language are not dead-stripped.__forceinline
is specified.fast
build links to ARM v4 libraries instead of ARM v5T libraries.--gnu
is not specified.
1.
Q. How can I silently install the compiler? A. If the silent installation of the compiler does not go well, the EULA agreement portion may have failed. When specified as shown below, installation is possible. start /wait msiexec /qn /i nintendo.msi /l*v nintendo_install.log EULA=1 [Options] /qn: quiet install mode /i: install /l*v log all the information EULA=1 accepting EULA from command line |
2.
Q. How can I handle the C9932E error when it is returned by the compiler?The compiler sometimes outputs the following message and encounters an error during compilation. Error: C9932E: Cannot obtain license for Compiler (feature besp_compiler_00) with license version >= 4.0 System clock has been set back For further information, refer to the FLEXnet Licensing documentation, available at "www.acresso.com". A. The compiler license file randomly checks the files on the PC, and raises this error if it finds a file with an invalid timestamp (a time set in the future).If you get this error, use Windows file search to find any files with timestamps set in the future, and fix the timestamps. This resolves the error.Specifically, you can fix the files by running the following commands in Cygwin. $ cd /cygdrive/c $ find -type f -mmin -1 -exec touch {} \; $ find -type f -amin -1 -exec touch {} \;Usually, this is the C: drive. It is a different drive when the target drive (path) specified by the environment variables %SystemDrive% and %TEMP% are not C. Run on the target drive when the target drive is not the C: drive. Note that files in the Recycle Bin might also have been found by the check. If this action does not solve the problem, try emptying your Recycle Bin. See the following known issue when the error code is C9555E/C9558E.
No. 41 "Compiler may improperly return a C9555E/C9558E error " |
3.
Q. What are the recommended operations when theatan2f function is called as atan2f(0.f, 0.f) ?
In the CTR development environment (RVCT4.0), when the atan2f function is called as atan2f(0.f, 0.f) , NaN is returned. But shouldn't it return 0.0 instead?
A.
According to the ISO specification, the operations when out-of-bounds arguments are passed to this function are left to the implementer. The RVCT4.0 ARM C library returns |
4.
Q. How can I make all warnings errors? A.
You can make all warnings into errors by adding |
5.
Q. Non-finite values cannot be handled when specifying A.
When |
6.
Q. The application cannot be built when specifying A.
The CTR-SDK is built with |
7.
Q. How do I deal with bugs related to optimization? A.
Currently, many bugs seem to be occurring when developers use the The following are possible workarounds.
■ If you cannot identify the exact function that generates the invalid code:
- Add the following statement to the start of the source code to change the optimization level of the source code.
#pragma Ospace
- Change the optimization level only when a specific optimization level has been specified.
#if __OPTIMISE_LEVEL == 3
#ifdef __OPTIMISE_TIME
#pragma Ospace
#endif
#endif
■ If you can identify the exact function that generates the invalid code:
- Change the optimization level only for that specific function.
#pragma push
#pragma Ospace
void foo()
{
...
}
#pragma pop
- Disable only the loop optimization feature that is enabled by -O3 -Otime.
#pragma push
#pragma Ono_vast
void foo()
{
...
}
#pragma pop
Note: This
|
8.
Q.
A compile error occurs when using the
When I compile code similar to the following, a compile error occurs in the std::string foo() { std::bitset<10> bits = 100; std::string str = bits.to_string(); // ---(a) return str; } A.
This symptom is per specification, because
The following shows the proper call method.
In addition, although it is not recommended, you can also use non-template member function versions by passing
Example: armcc -c test.cpp -D_RWSTD_NO_MEMBER_TEMPLATES |
9.
Q. In forward declarations and actual declarations, no compile errors occur if classes and structures are not specified correctly. A. This functionality is in accordance with the compiler design.
Because the only difference between |
10.
Q. How do I hide messages output by the compiler when using a precompiled header? A.
You can suppress messages related to precompiled headers by adding the |
11.
Q. When a static function call depends on a template argument, a compile error occurs. A. By design only names that have external linkage are targeted for lookup. This functionality follows the recommended procedure for dependent name lookup defined by section 14.6.4.2 in the C++ Standards.
However, despite this design, in RVCT the |
12.
Q. How do I generate binary files from source files written in C?
I want to use A. Unfortunately, that method no longer works in RVCT4.0 20100909 and later versions because of the license protection mechanism.We are considering other methods. |
13.
Q.
How do I display warning message #94 "The array size must be larger than zero" when specifying A.
Warning message #94 cannot be displayed when |
14.
Q. How do I display a warning when implicitly casting from a floating point number to an integer? A. The current compiler does not have this type of feature.Additional features are being discussed, but there are no plans to implement them in ARMCC 5.x. |
15.
Q.
With arrays of structures, optimization results in calls to
In the following code, the constructor should not be optimized when a default constructor is defined, but If the default constructor is not defined, this symptom does not occur. struct Point { int x; int y; int z; // Comment this out to see "inlined" version Point() {} }; struct Line { Point ends[2]; }; extern "C" void nnMain() { Line lines[10] __attribute__((unused)); while(1){} } A. The current compiler does not perform this type of optimization.Fixes are being discussed, but there are no plans to implement them in ARMCC 5.x. |
16.
Q. How do I output a warning when an auto variable having the same name as a member variable is defined? A. No such warning is currently output.Additional features are being discussed, but there are no plans to implement them in ARMCC 5.x. |
17.
Q. How do I use the A.
Currently, the
You can have the same results by using the |
18.
Q. Is it advisable to use VFP vector mode? A.
There is no problem in using the VFP vector mode.Section 5.17 VFP Vector Mode of the document included in the RVCT package ( |
19.
Q. What are the operations related to exceptions when using the
The compiler reference guide states that exceptions are not generated when the A.
With CTR-SDK you must specify
As it says in the compiler manual, the following exceptions are no longer generated when you specify
Operations when
For example, consider using
On the other hand, if
If an object compiled using
For these reasons, if |
20.
Q. During builds, the following error occurs: #1620-D:Internal fault:translation failed. Please contact your supplier ( A.
This internal error display is an
This message is generated when using the |
21.
Q. During Release builds, code that performs A.
When the
By using the |
22.
Q. How do I perform inline expansion at the object level?
When I specify A.
Inline expansion with the linker is a feature that inserts the body of a function in the compiler-generated code where the function is called. The linker is not capable of complex inlining.Consider using the |
23.
Q. How do I allocate from a stack rather than from a heap? A.
From ARMCC4.1 b640, allocations can be made from stacks by using the |
24.
Q. Should the compile option sequence be uniform between the side that creates the precompiled header and the side that references it? A.
The compiler gets the options from the command line or from the VIA file, sorts them by type, and then uses them.Even if different types of compiler options are specified between multiple applicable options (
For example: --create_pch=file.pch -O3 -Iaaa -Otime -Ibbb --use_pch=file.pch -O3 -Otime -Iaaa -Ibbb The command-line specifications are -O3 -Otime -Iaaa -IbbbThey are sorted by this type order and the precompiled header can be used.The options that work this way are those that can be specified multiple times, such as -D/-U/-I/-J/--preinclude .
For cases such as For example: --diag_suppress=1 --diag_suppress=2 --diag_suppress=3 is converted as follows. --diag_suppress=1,2,3 On the other hand, --diag_suppress=1,3 --diag_suppress=2 caution is required because the following concatenation occurs. --diag_suppress=1,3,2You can use either of the following to check the results of sorting options by type.
|
25.
Q. Sometimes weak symbols are given priority and linked before non-weak symbols in the library. A. Depending on the method of using the non-weak symbols, sometimes non-weak symbols in the library cannot replace weak symbols that are linked earlier.This functionality is part of the RVCT linker specifications.
The following information comes from section 4.1.19 -- The linker does not load functions or variables from the library, except in cases where the functions or variables are used as non-weak with another compiler. -- When you try to replace weak symbols with the non-weak symbols in the library, pay careful attention to whether they are actually replaced.Improvements to these specifications were discussed, but there are no planned changes. |
26.
Q.
When using A. This is correct functionality for the precompiled header mechanism.If this functionality is a problem, consider using one of the following methods.
Example of the
Example of the
|
27.
Q. No error occurs even when the class name is duplicated when defining member functions. No error is detected in the following code. Example: class MyClass { public: MyClass(); ~MyClass(); void DoAnything(); }; MyClass::MyClass::MyClass() {} // no error MyClass::MyClass::MyClass::~MyClass() {} // no error void MyClass::MyClass::MyClass::MyClass::DoAnything() {} // no error A. This functionality is consistent with the recommendations in Chapter 9.0.2 of the C++ Standards Specifications.
A class-name is inserted into the scope in which it is declared immediately after the class-name is seen. The class-name is also inserted into the scope of the class itself; this is known as the injected-class-name. For purposes of access checking, the injected-class-name is treated as if it were a public member name. [Translation in JIS X3014] A ≪class-name≫ is added to the declared valid scope immediately after the ≪class-name≫ appears. The ≪class-name≫ is also added to the valid scope of the class itself (called the injected-class-name). For access checking, injected-class-name is treated as if it were a public member name.This class name is the class name inserted into the scope of that class ( injected-class-name ).
|
28.
Q. How do I search the include path recursively? A. There is no way to search the include path recursively.There are no plans to add this feature. |
29.
Q.
A. This functionality is in accordance with the compiler design.Support of this feature is not planned, because it might also affect other tools. |
30.
Q. What is the difference between optimizing using A.
Optimization using
|
31.
Q. What is diagnostic message #2819-D?
When I use virtual functions in a template class, the #2819-D diagnostic message is displayed. But what does A. This diagnostic message notifies you that instantiation was carried out implicitly when the key function was a template member function.(The key function is the first virtual function declared in the class that is not an inline function or a pure virtual function.) The following is a workaround.
|
32.
Q. Are there any plans for the inline assembler to support notation similar to the GCC assembler instruction template? A. We are considering adding this feature as part of our long-term planning, but there are no plans to implement it in ARMCC 5.x. |
33.
Q. An error occurs when using a precompiled header created using A.
Note the following cautions when using precompiled headers created with
|
34.
Q. Can relative paths be used with the A. Currently, there are no plans to support this because of the problem of maintaining compatibility with existing functionality. |
35.
Q.
Even when specifying A.
By design, #pragma push #pragma arm section code="AAAA_Asm" AAAA_Asm() {...} #pragma arm section code="BBBB_Asm" BBBB_Asm() {...} #pragma arm section code="CCCC_Asm" CCCC_Asm() {...} : None. #pragma pop |
36.
Q. How can I know the position of the padding inserted by the compiler? The following warning is displayed when padding is necessary for aligning classes or structures, but is there a way to know where and how many bytes of padding have been inserted? #1301-D: padding inserted in XXXXX A. Not currently.There are no plans to implement this feature in ARMCC 5.x. |
37.
Q. Code is not optimized if it makes multiple calls to functions for which
When I use the A. We are considering improvements, but there are no plans to support this feature in ARMCC 5.x.If you use macros, only the last function call out of all the duplicated calls is left as code. |
38.
Q. What are the character codes that can be used with the compiler?
A.
The treatment of multi-byte code with ARMCC depends on the OS used by the host. Also, character codes of object files after compilation are made into the same character codes as the source code for multibyte characters and into UTF-16LE for wide strings. |
39.
Q. What are the operations of the static initializer? When writing a constructor inline, the following source code build is executed. --- - A.cpp #include <nn.h> class C { public: C() { NN_LOG("AAA:%s(%d)\n", __FILE__, __LINE__); } }; C A; --- - B.cpp #include <nn.h> class C { public: C() { NN_LOG("BBB:%s(%d)\n", __FILE__, __LINE__); } }; C B; ---
When this code is executed, the instance A, B static initializer can call only one constructor. A.
When specifying __sti___5_A_cpp PROC PUSH {r4,lr} LDR r0,|L1.16| Calls BL _ZN1CC1Ev ; C::C() POP {r4,pc} ENDPThis causes a reference to the class C constructor _ZN1CC1Ev .The linker resolves this issue, but the class C constructor _ZN1CC1Ev is defined with the same name in multiple objects, and these objects are used by the same name common group (COMGROUP ).AREA ||i._ZN1CC1Ev||, COMGROUP=_ZN1CC1Ev, CODE, READONLY, ALIGN=2 _ZN1CC2Ev ; Alternate entry point _ZN1CC1Ev PROCAs described in section 5.2 Deleting Common Groups and Common Sections of the Using the Linker documentation, the linker maintains the group that was detected first and deletes all others. For this reason, a linker error for duplicated definitions does not occur.
When __sti___5_A_cpp PROC MOV r2,#6 ADR r1,|L1.16| ADR r0,|L1.52| B _ZN2nn3dbg6detail6PrintfEPKczAs a result, each constructor is called in the same conversion unit. When --no_inline is specified without --retain=calls , the constructor is not expanded inline. Be careful when intentionally using a constructor of the same name with other compiler units. |
40.
Q. What is the handling for array pointers? When the following code is compiled, it is passed over and there is no error. char (*str)[256] = new (char(*)[256])[2];Because the right side is "pointer to the array" and the left side is the start address of the "array of pointers to the arrays," the indirect reference level is different. For the left side, is the array of pointers to the array something that can be made new? (This cannot be done with Visual Studio 2008.) A.
You can replace that code with the following code. typedef char(*the_type)[256]; the_type str = new (the_type)[2];The expression new (the_type)[2] is not valid with C++, so this error is in a mode that specifies strict C++ standards (--strict ).Also, with --strict_warnings , a warning message is displayed.In the default non-strict mode ( --no_strict ), it is handled as follows.
the_type str = (new (the_type))[2]; the_type is a pointer to a 256-character array. (new (the_type)) allocates this pointer and returns this address.(new (the_type))[2] performs this operation, and then handles the value returned as an array, and returns the second element (having the_type type).
It is the following when allocating an array of pointers to the arrays. (To be clear, typedef char array_type[256]; typedef array_type *array_type_ptr; array_type_ptr *str = new array_type_ptr[2];This code allocates an array that has two pointers to 256-character arrays as elements, and sets the first element for the pointer array in str .
The C++ standards state that using parentheses with |
41.
Q. How do I use global variables in anonymous namespaces from inline assembly code? I can't get the address of a variable in an anonymous namespace. Code like the following causes the L6218E error to occur. namespace{ float localValue; asm float *GetLocalValueAddr() { LDR r0,=__cpp(&localValue) BX lr } } main() { NN_LOG("local Addr:%p\n",GetLocalValueAddr()); } A.
Multiple
The |
42.
Q. Do you plan to support C++0x (C++11) with ARMCC? A.
- Support is being considered in ARMCC5.x. |
43.
Q. A A.
The default linker options select ARM v4 libraries (such as
Specify the
The |
44.
Q. If the compiler is changed to ARMCC 5.x, warnings appear that previously did not appear. A.
Because of the front-end compiler change in ARMCC 5.x, sometimes warnings appear that did not appear previously. The following warnings are examples of the warnings that might appear.
|
45.
Q. If the compiler is changed to ARMCC 5.x, error #3093 occurs when A.
The compiler supports unnamed unions or structures embedded in structures when the Previously, however, even when neither of these two options were used, the compiler did not output the appropriate errors about the use of unnamed unions or structures. Because this issue causes invalid code to be generated, ARMCC 5.x has been fixed so that errors are output. |
46.
Q. When changing to ARMCC5.04, the L6244E error occurs when linking with the DLL module. A.
With the ARMCC 5.04 linker, the specifications have been changed so that
The CTR-SDK build system generates the L6244E error when linking to the DLL module because it does not support this specification change.
There are plans to support this specification in the CTR-SDK. For now, specify
VSI-CTR Platform 2.3.4 and later versions support the |
47.
Q. How can I reduce build time? A. The following methods can be used to reduce build times. 1. Methods impacting the overall build time
- Use parallel execution.
- Implement sufficient memory in the build environment.
- Place files used for the build on a high-speed disc.
2. Methods impacting the compile time
- Adjust the header file search order.
- Use precompiled headers.
- Do not output unnecessary debug information.
- Combine files into compilation units. 3. Methods impacting the link time
- Do not generate map files and call graphs.
- Do not generate a disassembly list.
- Reduce the debug information for the input object file.
- Do not output debug information during partial linking to DLL applications or modules.
Debugging information is no longer created during partial linking to DLL applications in CTR-SDK 7.2.1 or later. When using projects created with a CTR-SDK version earlier than 7.2.1 in VSI-CTR, use the |
48.
Q. How do I build without generating a map file? A.
According to the default build rules of the SDK, the information specified for the following options is output to the map file (MAP file) specified by the
If you do not want to generate this map file, do not specify these options and also do not specify the
Change the |
49.
Q. After I changed to ARMCC5.04, the debugger started malfunctioning. A.
With the ARMCC 5.04 compiler, there are changes to the information in the output file (AXF file) that is referenced by the debugger. Debuggers that do not support these changes may not read the debug information correctly and malfunction.
To debug applications created using ARMCC 5.04, use PARTNER-CTR 5.70-040 (2014/01/23) or a later version. |
CONFIDENTIAL