diff options
author | Mark Spruiell <mes@zeroc.com> | 2012-12-08 20:44:59 -0800 |
---|---|---|
committer | Mark Spruiell <mes@zeroc.com> | 2012-12-08 20:44:59 -0800 |
commit | 7eea6e7c69ce71e69492330a4ff1cf09df9f39f2 (patch) | |
tree | 89404ec19d48b6ee7519486b831bc81d63c94208 /cpp/src/Slice/CPlusPlusUtil.cpp | |
parent | ICE-5103 - SSL failure in C#/C++ cross test (diff) | |
download | ice-7eea6e7c69ce71e69492330a4ff1cf09df9f39f2.tar.bz2 ice-7eea6e7c69ce71e69492330a4ff1cf09df9f39f2.tar.xz ice-7eea6e7c69ce71e69492330a4ff1cf09df9f39f2.zip |
ICE-5120 - assertion error in C++ marshaling code
Diffstat (limited to 'cpp/src/Slice/CPlusPlusUtil.cpp')
-rw-r--r-- | cpp/src/Slice/CPlusPlusUtil.cpp | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/cpp/src/Slice/CPlusPlusUtil.cpp b/cpp/src/Slice/CPlusPlusUtil.cpp index 403fc9b15b5..6aa2416f3f3 100644 --- a/cpp/src/Slice/CPlusPlusUtil.cpp +++ b/cpp/src/Slice/CPlusPlusUtil.cpp @@ -222,16 +222,30 @@ writeParamEndCode(Output& out, const TypePtr& type, bool optional, const string& out << nl << "if(___" << fixedName << ")"; out << sb; out << nl << fixedName << ".__setIsSet();"; + out << nl << "if(!___" << fixedName << "->empty())"; + out << sb; out << nl << fixedName << "->first" << " = &(*___" << fixedName << ")[0];"; out << nl << fixedName << "->second" << " = " << fixedName << "->first + " << "___" << fixedName << "->size();"; out << eb; + out << nl << "else"; + out << sb; + out << nl << fixedName << "->first" << " = " << fixedName << "->second" << " = 0;"; + out << eb; + out << eb; } else { + out << nl << "if(!___" << fixedName << ".empty())"; + out << sb; out << nl << fixedName << ".first" << " = &___" << fixedName << "[0];"; out << nl << fixedName << ".second" << " = " << fixedName << ".first + " << "___" << fixedName << ".size();"; + out << eb; + out << nl << "else"; + out << sb; + out << nl << fixedName << ".first" << " = " << fixedName << ".second" << " = 0;"; + out << eb; } } } |