Uploaded image for project: 'Embedded Software & Tools'
  1. Embedded Software & Tools
  2. EXT_EP-9365

--opt_level=4, plus library compiled with 6.2.x or older, can cause no-match-for-UMULT error

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Fixed
    • Icon: Medium Medium
    • Code Generation Tools
    • CODEGEN-6276
    • Hide
      C2000_18.1.0.LTS
       C2000_18.12.0.LTS
      Show
      C2000_18.1.0.LTS  C2000_18.12.0.LTS
    • Hide
      C2000_19.6.0.STS
       C2000_18.12.3.LTS
      Show
      C2000_19.6.0.STS  C2000_18.12.3.LTS
    • Make sure all code, even libraries, are compiled with 6.4.x or a later compiler version, or avoid using --opt_level=4.
    • Hide
      The C2000 compiler changed its internal representation of pointers from 22 bits to 32 bits around version 6.4.0. When encountering 22-bit pointer types, these recent compilers silently convert them to 32-bit types, and everything is usually fine.

      The problem here is with a qualified pointer type -- "float * volatile" -- where the pointer type itself is qualified, not the type pointed to. Qualified 22-bit pointer types are not properly converted to 32 bits.

      Normally that's no problem, because recent compilers will not produce 22-bit pointer types to worry about. However, libraries may have compiler internal representations embedded within them, for use when compiling with --opt_level=4. If the library is old enough, it may have been compiled with a pre-6.4.x compiler and thus have 22-bit pointers. At the .obj level, those aren't visible, but --opt_level=4 uses the embedded internal representation and then they're apparent.

      This problem requires all these elements:
      1. Library compiled with compiler older than 6.4.0.
      2. Library contains embedded internal representation.
      3. Library uses qualified pointers, eg, "float * volatile" or "int * const".
      4. Project is compiled with --opt_level=4.
      5. Project compiler is 18.1.x or newer.

      The troublesome library in this case is SFRA_IQ_Lib.lib, which was compiled with version 6.2.8.
      Show
      The C2000 compiler changed its internal representation of pointers from 22 bits to 32 bits around version 6.4.0. When encountering 22-bit pointer types, these recent compilers silently convert them to 32-bit types, and everything is usually fine. The problem here is with a qualified pointer type -- "float * volatile" -- where the pointer type itself is qualified, not the type pointed to. Qualified 22-bit pointer types are not properly converted to 32 bits. Normally that's no problem, because recent compilers will not produce 22-bit pointer types to worry about. However, libraries may have compiler internal representations embedded within them, for use when compiling with --opt_level=4. If the library is old enough, it may have been compiled with a pre-6.4.x compiler and thus have 22-bit pointers. At the .obj level, those aren't visible, but --opt_level=4 uses the embedded internal representation and then they're apparent. This problem requires all these elements: 1. Library compiled with compiler older than 6.4.0. 2. Library contains embedded internal representation. 3. Library uses qualified pointers, eg, "float * volatile" or "int * const". 4. Project is compiled with --opt_level=4. 5. Project compiler is 18.1.x or newer. The troublesome library in this case is SFRA_IQ_Lib.lib, which was compiled with version 6.2.8.

      --opt_level=4, plus library compiled with 6.2.x or older, can cause no-match-for-UMULT error

            syncuser TI User
            syncuser TI User
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

              Created:
              Updated:
              Resolved: