This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

Compiler/TMS32TCI6614BSXCMS: TI CGT 8: Compiler internal error

Part Number: TMS32TCI6614BSXCMS

Tool/software: TI C/C++ Compiler

Hello

I use CGT 8.3.4 to build my project for C66 core.

And I'm getting following error, when compiling simple test that uses header-only JSON parser:

>> ./json.hpp, line 16176: INTERNAL ERROR: no match for PLUS


This may be a serious problem.  Please contact customer support with a
description of this problem and a sample of the source files that caused this
INTERNAL ERROR message to appear.

Cannot continue compilation - ABORTING!

GCC builds same code without errors.


It looks like a compiler bug.

To reproduce error on attached sources:

~/ti/ccsv8/tools/compiler/ti-cgt-c6000_8.3.4/bin/cl6x -mv6600 -cpp --compile_only --include_path=${HOME}/ti/ccsv8/tools/compiler/ti-cgt-c6000_8.3.4/include --include_path=. ./test.cpp

ti_cgt8_crash.tar.gz

  • Thank you for providing the test case. I can reproduce the internal error, and will file a bug report for it shortly. I will then update this thread with the bug tracking ID.

    I don't have a workaround to suggest for now but there might be one after the compiler experts have had a chance to look into the bug report.

    Thank you for bringing this to our attention.

  • Igor,

    The bug tracking ID for this issue is CODEGEN-6476. Feel free to track its status using the SDOWP link in my signature.

  • As a workaround, use any level of optimisation, --opt_level=0 through --opt_level=3, and the compilation will complete successfully.

  • Compiling a C++ test case containing a switch statement where the condition is a scoped enum with underlying type smaller than int will most likely cause the compiler to crash.
    Doing any of the following will work around the bug:
    • use any level of optimization from -O0 to -O3
    • change the scoped enum to an unscoped enum
    • specify the size of the enum as int or unsigned int
    • change the switch to a tree of if/then/else statements