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.

INTERNAL ERROR: Decomposition error

typedef long double real64;

class IBase
{
public:
	virtual real64 getReal() = 0;
};

class Bar
: public IBase
{
public:
	Bar() :
		m_real(0)
	{
	}
	virtual real64 getReal();

private:
	real64 m_real;
};

real64 Bar::getReal()
{
	return m_real;
}

class Foo
{
public:
	Foo()
	{
		m_bar = new Bar();
	}
	IBase* m_bar;
};

Foo& getFoo()
{
	static Foo foo;
	return foo;
}

void test()
{
	Foo& foobar = getFoo();;
	real64 newReal = 1;
	newReal += foobar.m_bar->getReal();
}

 

The above sample code produces the following compiler output:

**** Build of configuration Debug for project FW ****

"C:\\ti\\ccsv6\\utils\\bin\\gmake" -j 4 error.obj
'Building file: ../error.cpp'
'Invoking: C2000 Compiler'
"C:/ti/ccsv6/tools/compiler/c2000_6.4.11/bin/cl2000" -v28 -mt -ml --tmu_support=tmu0 --float_support=fpu32 --cla_support=cla1 --include_path="C:/ti/ccsv6/tools/compiler/c2000_6.4.11/include" --advice:performance=all -g --define=LARGE_MODEL --define=ARCH28075 --display_error_number --diag_wrap=off --diag_warning=225 --diag_warning=255 --verbose_diagnostics --buffer_diagnostics --gen_func_subsections=on --preproc_with_compile --preproc_dependency="error.pp" --cmd_file="configPkg/compiler.opt" "../error.cpp"
>> ../error.cpp, line 48: INTERNAL ERROR: Decomposition error


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!


>> Compilation failure
gmake: *** [error.obj] Error 1

**** Build Finished ****

The error occurs in the line:

newReal += foobar.m_bar->getReal();

If I split the line into two lines without the += operator (assign the value to a temporary variable, then add that variable), the code compiles without error.
For me that solves the issue, but I wanted to report it anyway, as the error message suggests.