<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic PVS-Studio VS IPP Samples - part 3 in Intel® Integrated Performance Primitives</title>
    <link>https://community.intel.com/t5/Intel-Integrated-Performance/PVS-Studio-VS-IPP-Samples-part-3/m-p/770281#M627</link>
    <description>&lt;DIV id="tiny_quote"&gt;&lt;DIV style="margin-left: 2px; margin-right: 2px;"&gt;Quoting &lt;A jquery1339550236781="58" rel="/en-us/services/profile/quick_profile.php?is_paid=&amp;amp;user_id=308506" href="https://community.intel.com/en-us/profile/308506/" class="basic"&gt;Andrey Karpov&lt;/A&gt;&lt;/DIV&gt;&lt;DIV style="background-color: #e5e5e5; margin-left: 2px; margin-right: 2px; border: 1px inset; padding: 5px;"&gt;&lt;I&gt;&lt;P&gt;...&lt;BR /&gt;&lt;STRONG&gt;Case N2. Filling the virtual method table&lt;/STRONG&gt; &lt;/P&gt;&lt;P&gt;There are rather many places in IPP Samples &lt;STRONG&gt;where memory is allocated for classes through the malloc()&lt;/STRONG&gt; function and initialized through&lt;BR /&gt;the memset() function. Maybe there's nothing bad about it, but I'm discomforted by the fact that these classes have virtual methods.&lt;BR /&gt;Thus, I suspect that the virtual method table might be spoiled and something will go wrong...&lt;BR /&gt;...&lt;BR /&gt;PVS-Studio's diagnostic message: V598 The 'memset' function is used to nullify the fields of '_MediaDataEx' class.&lt;BR /&gt;Virtual method table will be damaged by this. vc1_spl umc_vc1_spl.cpp 131&lt;/P&gt;&lt;P&gt;I don't know if there is a problem here, but we'd better warn about it...&lt;/P&gt;&lt;/I&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;P&gt;&lt;BR /&gt;Iuse that technique strictlyon C++ classes or template classes without any virtual methods. As soon as a memory&lt;BR /&gt;for some class is allocated with 'malloc' CRT-function a constructor is not called and this is exactly what I need.&lt;BR /&gt;Icalled it as a'Delayed Object Initialization'.&lt;BR /&gt;&lt;BR /&gt;I wonder ifthe PVS-Studio also checks for a '&lt;STRONG&gt;_declspec( novtable )&lt;/STRONG&gt;' declaration?&lt;/P&gt;</description>
    <pubDate>Wed, 13 Jun 2012 01:19:10 GMT</pubDate>
    <dc:creator>SergeyKostrov</dc:creator>
    <dc:date>2012-06-13T01:19:10Z</dc:date>
    <item>
      <title>PVS-Studio VS IPP Samples - part 3</title>
      <link>https://community.intel.com/t5/Intel-Integrated-Performance/PVS-Studio-VS-IPP-Samples-part-3/m-p/770280#M626</link>
      <description>&lt;P&gt;I cannot get rid of the urge to sell a PVS-Studio license to the developer team of Intel Performance Primitives Library :-).&lt;/P&gt;
&lt;P&gt;Of course, I'd like to have some sales in other Intel departments too, but the IPP developers seem closer to us. First, some of them live in Russia. Second, they are already using static analyzers in their work. Third, we already have some groundwork in this area. I mean that we already checked the IPP Samples project twice (&lt;A href="http://www.viva64.com/en/a/0069/"&gt;first check&lt;/A&gt;, &lt;A href="http://www.viva64.com/en/b/0112/"&gt;second check&lt;/A&gt;). It would be, of course, much more interesting to test the IPP library itself instead of the samples, but we don't have access to its source codes.&lt;/P&gt;
&lt;P&gt;So, I'll resort to the standard method of advertising ourselves. We will continue to reanalyze IPP Samples from time to time to find new errors. It indicates that the PVS-Studio code analyzer is actively developing. But the greatest profit can be, of course, obtained through regular use of the analyzer, not single runs. Do not forget the capabilities of &lt;A href="http://www.viva64.com/en/d/0006/"&gt;night runs&lt;/A&gt; and &lt;A href="http://www.viva64.com/en/d/0218/"&gt;background analysis&lt;/A&gt; after compilation. &lt;/P&gt;
&lt;P&gt;I will cite some of the errors detected by &lt;A href="http://www.viva64.com/en/pvs-studio/"&gt;PVS-Studio&lt;/A&gt; v4.60. These are, of course, not all the odd fragments we've found. There are much more of them, but I cannot tell for sure if they have errors or not. At the same time, let it be the reason for IPP developers to install and try our tool. We have changed the trial model so that the tool now possesses its full functionality. So, you are welcome to try it.&lt;/P&gt;
&lt;P&gt;Let's have a look at odd fragments in the IPP Samples code.&lt;/P&gt;
&lt;P&gt;&lt;B&gt;Case N1. Meaningless statement&lt;/B&gt;  &lt;/P&gt;
[cpp]AACStatus bsacdecSetNumChannels(Ipp32s channelConfiguration,
                                AACDec *state)
{
  state-&amp;gt;com.m_channel_number = channelConfiguration;
  if (channelConfiguration == 7) {
    state-&amp;gt;com.m_channel_number;
  }

  return AAC_OK;
}[/cpp]
&lt;P&gt;PVS-Studio's diagnostic message: V607 Ownerless expression 'state-&amp;gt;com.m_channel_number'. aac_dec aac_dec_api_fp.c 1404&lt;/P&gt;
&lt;P&gt;The "state-&amp;gt;com.m_channel_number;" statement is very odd. An assignment or something else must be missing here.&lt;/P&gt;
&lt;P&gt;&lt;B&gt;Case N2. Filling the virtual method table&lt;/B&gt; &lt;/P&gt;
&lt;P&gt;There are rather many places in IPP Samples where memory is allocated for classes through the malloc() function and initialized through the memset() function. Maybe there's nothing bad about it, but I'm discomforted by the fact that these classes have virtual methods. Thus, I suspect that the virtual method table might be spoiled and something will go wrong.&lt;/P&gt;
&lt;P&gt;For example, the _MediaDataEx class contains virtual functions:&lt;/P&gt;
[cpp]virtual bool TryStrongCasting(....) const;
virtual bool TryWeakCasting(....) const;[/cpp]
&lt;P&gt;And this is how an object of this class is created:&lt;/P&gt;
[cpp]Status VC1Splitter::Init(SplitterParams&amp;amp; rInit)
{
  MediaDataEx::_MediaDataEx *m_stCodes;
  ...
  m_stCodes = (MediaDataEx::_MediaDataEx *)
    ippsMalloc_8u(
      START_CODE_NUMBER*2*sizeof(Ipp32s)+
      sizeof(MediaDataEx::_MediaDataEx));
  ...
  memset(m_stCodes, 0,
   (START_CODE_NUMBER*2*sizeof(Ipp32s)+
   sizeof(MediaDataEx::_MediaDataEx)));
  ...
}[/cpp]
&lt;P&gt;PVS-Studio's diagnostic message: V598 The 'memset' function is used to nullify the fields of '_MediaDataEx' class. Virtual method table will be damaged by this. vc1_spl umc_vc1_spl.cpp 131&lt;/P&gt;
&lt;P&gt;I don't know if there is a problem here, but we'd better warn about it.&lt;/P&gt;
&lt;P&gt;The same thing can be seen in the following places:&lt;/P&gt;
&lt;P&gt;V598 The 'memset' function is used to nullify the fields of '_MediaDataEx' class. Virtual method table will be damaged by this. vc1_dec umc_vc1_video_decoder.cpp 641 False&lt;/P&gt;
&lt;P&gt;V598 The 'memset' function is used to nullify the fields of 'AVS_DISASSEMBLING_CONTEXT' class. Virtual method table will be damaged by this. avs_enc umc_avs_enc_slice.cpp 45&lt;/P&gt;
&lt;P&gt;V598 The 'memset' function is used to nullify the fields of 'AVS_DISASSEMBLING_CONTEXT' class. Virtual method table will be damaged by this. avs_enc umc_avs_enc_slice.cpp 29&lt;/P&gt;
&lt;P&gt;V598 The 'memset' function is used to nullify the fields of 'AVS_DISASSEMBLING_CONTEXT' class. Virtual method table will be damaged by this. avs_enc umc_avs_enc_slice.cpp 22&lt;/P&gt;
&lt;P&gt;V598 The 'memcpy' function is used to copy the fields of 'AVSVideoEncoderParams' class. Virtual method table will be damaged by this. avs_enc umc_avs_enc.cpp 115&lt;/P&gt;
&lt;P&gt;V598 The 'memset' function is used to nullify the fields of 'AVS_DECODING_CONTEXT' class. Virtual method table will be damaged by this. avs_dec umc_avs_dec_slice_init.cpp 65&lt;/P&gt;
&lt;P&gt;V598 The 'memset' function is used to nullify the fields of 'AVS_DEBLOCKING_CONTEXT' class. Virtual method table will be damaged by this. avs_common umc_avs_slice.cpp 153&lt;/P&gt;
&lt;P&gt;V598 The 'memset' function is used to nullify the fields of 'AVS_RECONSTRUCTING_CONTEXT' class. Virtual method table will be damaged by this. avs_common umc_avs_slice.cpp 133&lt;/P&gt;
&lt;P&gt;V598 The 'memset' function is used to nullify the fields of 'AVS_DEBLOCKING_CONTEXT' class. Virtual method table will be damaged by this. avs_common umc_avs_slice.cpp 43&lt;/P&gt;
&lt;P&gt;V598 The 'memset' function is used to nullify the fields of 'AVS_RECONSTRUCTING_CONTEXT' class. Virtual method table will be damaged by this. avs_common umc_avs_slice.cpp 42&lt;/P&gt;
&lt;P&gt;V598 The 'memset' function is used to nullify the fields of 'AVS_DECODING_CONTEXT' class. Virtual method table will be damaged by this. avs_common umc_avs_slice.cpp 41&lt;/P&gt;
&lt;P&gt;V598 The 'memset' function is used to nullify the fields of 'AVS_DEBLOCKING_CONTEXT' class. Virtual method table will be damaged by this. avs_common umc_avs_slice.cpp 32&lt;/P&gt;
&lt;P&gt;V598 The 'memset' function is used to nullify the fields of 'AVS_RECONSTRUCTING_CONTEXT' class. Virtual method table will be damaged by this. avs_common umc_avs_slice.cpp 31&lt;/P&gt;
&lt;P&gt;V598 The 'memset' function is used to nullify the fields of 'AVS_DECODING_CONTEXT' class. Virtual method table will be damaged by this. avs_common umc_avs_slice.cpp 30&lt;/P&gt;
&lt;P&gt;&lt;B&gt;Case N3. Checking pointers after use&lt;/B&gt;    &lt;/P&gt;
&lt;P&gt;We've found several fragments where a pointer is used first and then is checked for being a null pointer. Perhaps the pointer will never be null and the code works correctly all the time, but it's not good anyway.&lt;/P&gt;
&lt;P&gt;For example:&lt;/P&gt;
[cpp]VIDEO_DRV_CREATE_BUFFERS_FUNC(....)
{
  ...
  VideoDrvVideoMemInfo* drv_vm = &amp;amp;(driver-&amp;gt;m_VideoMemInfo);
  ...
  if ((NULL == driver) || (NULL == bufs))
  {
    ERR_SET(VM_NULL_PTR, "null ptr");
  }
  ...
}[/cpp]
&lt;P&gt;PVS-Studio's diagnostic message: V595 The 'driver' pointer was utilized before it was verified against nullptr. Check lines: 40, 46. video_renders drv.c 40&lt;/P&gt;
&lt;P&gt;The pointer check here should be either moved up or removed at all if the "dreiver==NULL" condition is impossible.&lt;/P&gt;
&lt;P&gt;Here are other identical code samples:&lt;/P&gt;
[cpp]Ipp16s *pNewSpeech = encoderObj-&amp;gt;stEncState.pSpeechPtrNew;
if (NULL==encoderObj || NULL==src || NULL ==dst )
  return APIGSMAMR_StsBadArgErr;[/cpp]
&lt;P&gt;PVS-Studio's diagnostic message: V595 The 'encoderObj' pointer was utilized before it was verified against nullptr. Check lines: 296, 298. speech encgsmamr.c 296&lt;/P&gt;
[cpp]m_pAVSCompressorParams = DynamicCast&lt;AVSVIDEOENCODERPARAMS&gt; (pParams);
...  
m_qp = m_pAVSCompressorParams-&amp;gt;m_iConstQuant;
// check error(s)
if (NULL == m_pAVSCompressorParams)
  return UMC_ERR_NULL_PTR;[/cpp]
&lt;P&gt;PVS-Studio's diagnostic message: V595 The 'm_pAVSCompressorParams' pointer was utilized before it was verified against nullptr. Check lines: 88, 91. avs_enc umc_avs_enc_fusion_core.cpp 88&lt;/P&gt;
&lt;P&gt;&lt;B&gt;Case N4. Odd expressions with commas&lt;/B&gt; &lt;/P&gt;
&lt;P&gt;There are a couple of fragments with odd commas ','. The first sample:&lt;/P&gt;
[cpp]void GetIntraDCPredictors(VC1Context* pContext)
{
  DCPred.DC[13] = pC-&amp;gt;DCBlkPred[5].DC,QurrQuant;
  ...
}[/cpp]
&lt;P&gt;PVS-Studio's diagnostic message: V521 Such expressions using the ',' operator are dangerous. Make sure the expression is correct. vc1_dec umc_vc1_dec_mb_com.cpp 370&lt;/P&gt;
&lt;P&gt;It might be a misprint, or something is missing here.&lt;/P&gt;
&lt;P&gt;The second sample:&lt;/P&gt;
&lt;P&gt;V521 Such expressions using the ',' operator are dangerous. Make sure the expression is correct. speech usc_dtmf.c 309&lt;/P&gt;
[cpp]static int DTMF_16s(....)
{
  ...
  for (i = pIppTDParams-&amp;gt;dtmf_fs, j = 0;
       i &amp;lt; dtmf_frame_size+pIppTDParams-&amp;gt;dtmf_fs, j &amp;lt; nbytes;
       i++, j++)
}[/cpp]
&lt;P&gt;PVS-Studio's diagnostic message: V521 Such expressions using the ',' operator are dangerous. Make sure the expression is correct. speech usc_dtmf.c 309&lt;/P&gt;
&lt;P&gt;This is a more interesting example than the previous one. The logical condition seems to be written incorrectly. The condition must have looked as follows:&lt;/P&gt;
[cpp]i &amp;lt; dtmf_frame_size+pIppTDParams-&amp;gt;dtmf_fs &amp;amp;&amp;amp; j &amp;lt; nbytes[/cpp]
&lt;P&gt;&lt;B&gt;Case N5. Odd implicit type conversion&lt;/B&gt;&lt;/P&gt;
[cpp]class MeMV
{
public:
  MeMV(){};
  MeMV(int a0){x = (Ipp16s)a0; y=(Ipp16s)a0;};
  MeMV(int a0, int a1){x = (Ipp16s)a0; y=(Ipp16s)a1;};
  ...
}

MeMV MePredictCalculatorVC1::GetPrediction8x8()
{
  ...
  default:
    return false;
  ...
}[/cpp]
&lt;P&gt;PVS-Studio's diagnostic message: V601 The 'false' value becomes a class object. me umc_vec_prediction.cpp 754&lt;/P&gt;
&lt;P&gt;The GetPrediction8x8() function returns the MeMV type. But in one branch, it returns the 'false' value. This value is implicitly cast to 'int' and the MeMV(int a0) constructor is called. I'm not sure, but there is something else to be returned in this code, or an exception should be thrown.&lt;/P&gt;
&lt;P&gt;An identical implicit type conversion can be found here:&lt;/P&gt;
&lt;P&gt;V601 The 'false' value becomes a class object. me umc_vec_prediction.cpp 717&lt;/P&gt;
&lt;P&gt;&lt;B&gt;Case N6. Undefined behavior&lt;/B&gt;&lt;/P&gt;
&lt;P&gt;In very many places of IPP Samples, you can find constructs that cause undefined or unspecified behavior. I wrote about some of them in the previous post. Now we have found a whole lot of negative value shifts. I cannot tell for sure that it may cause some troubles, but I recommend considering this article: "&lt;A href="http://www.viva64.com/en/b/0142/"&gt;Wade not in unknown waters. Part three&lt;/A&gt;" just in case.&lt;/P&gt;
&lt;P&gt;In this file - &lt;A href="http://www.viva64.com/external-pictures/txt/ipp-samples-ub.txt"&gt;ipp-samples-ub.txt&lt;/A&gt; - you can see where the potentially dangerous code is located.&lt;/P&gt;
&lt;P&gt;&lt;B&gt;Conclusion&lt;/B&gt;&lt;/P&gt;
&lt;P&gt;Dear IPP and IPP Samples developers, we're waiting for your letters. We are ready to discuss and implement missing functionality in the PVS-Studio tool that prevents you from using it. We are also ready to implement diagnostic rules relevant to your project.&lt;/P&gt;
&lt;P&gt;And all the rest I wish bugless code and invite to our twitter &lt;A href="https://twitter.com/Code_Analysis" target="_blank"&gt;@Code_Analysis&lt;/A&gt; where we post links to interesting articles on C++, programming, static code analysis and the PVS-Studio tool.&lt;/P&gt;&lt;/AVSVIDEOENCODERPARAMS&gt;</description>
      <pubDate>Thu, 19 Apr 2012 08:00:02 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Integrated-Performance/PVS-Studio-VS-IPP-Samples-part-3/m-p/770280#M626</guid>
      <dc:creator>AndreyKarpov</dc:creator>
      <dc:date>2012-04-19T08:00:02Z</dc:date>
    </item>
    <item>
      <title>PVS-Studio VS IPP Samples - part 3</title>
      <link>https://community.intel.com/t5/Intel-Integrated-Performance/PVS-Studio-VS-IPP-Samples-part-3/m-p/770281#M627</link>
      <description>&lt;DIV id="tiny_quote"&gt;&lt;DIV style="margin-left: 2px; margin-right: 2px;"&gt;Quoting &lt;A jquery1339550236781="58" rel="/en-us/services/profile/quick_profile.php?is_paid=&amp;amp;user_id=308506" href="https://community.intel.com/en-us/profile/308506/" class="basic"&gt;Andrey Karpov&lt;/A&gt;&lt;/DIV&gt;&lt;DIV style="background-color: #e5e5e5; margin-left: 2px; margin-right: 2px; border: 1px inset; padding: 5px;"&gt;&lt;I&gt;&lt;P&gt;...&lt;BR /&gt;&lt;STRONG&gt;Case N2. Filling the virtual method table&lt;/STRONG&gt; &lt;/P&gt;&lt;P&gt;There are rather many places in IPP Samples &lt;STRONG&gt;where memory is allocated for classes through the malloc()&lt;/STRONG&gt; function and initialized through&lt;BR /&gt;the memset() function. Maybe there's nothing bad about it, but I'm discomforted by the fact that these classes have virtual methods.&lt;BR /&gt;Thus, I suspect that the virtual method table might be spoiled and something will go wrong...&lt;BR /&gt;...&lt;BR /&gt;PVS-Studio's diagnostic message: V598 The 'memset' function is used to nullify the fields of '_MediaDataEx' class.&lt;BR /&gt;Virtual method table will be damaged by this. vc1_spl umc_vc1_spl.cpp 131&lt;/P&gt;&lt;P&gt;I don't know if there is a problem here, but we'd better warn about it...&lt;/P&gt;&lt;/I&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;P&gt;&lt;BR /&gt;Iuse that technique strictlyon C++ classes or template classes without any virtual methods. As soon as a memory&lt;BR /&gt;for some class is allocated with 'malloc' CRT-function a constructor is not called and this is exactly what I need.&lt;BR /&gt;Icalled it as a'Delayed Object Initialization'.&lt;BR /&gt;&lt;BR /&gt;I wonder ifthe PVS-Studio also checks for a '&lt;STRONG&gt;_declspec( novtable )&lt;/STRONG&gt;' declaration?&lt;/P&gt;</description>
      <pubDate>Wed, 13 Jun 2012 01:19:10 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Integrated-Performance/PVS-Studio-VS-IPP-Samples-part-3/m-p/770281#M627</guid>
      <dc:creator>SergeyKostrov</dc:creator>
      <dc:date>2012-06-13T01:19:10Z</dc:date>
    </item>
    <item>
      <title>PVS-Studio VS IPP Samples - part 3</title>
      <link>https://community.intel.com/t5/Intel-Integrated-Performance/PVS-Studio-VS-IPP-Samples-part-3/m-p/770282#M628</link>
      <description>In this case, we do not consider __declspec(novtable). Thank you for your comment. We will fix this in future versions.</description>
      <pubDate>Wed, 13 Jun 2012 05:12:54 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Integrated-Performance/PVS-Studio-VS-IPP-Samples-part-3/m-p/770282#M628</guid>
      <dc:creator>AndreyKarpov</dc:creator>
      <dc:date>2012-06-13T05:12:54Z</dc:date>
    </item>
    <item>
      <title>PVS-Studio VS IPP Samples - part 3</title>
      <link>https://community.intel.com/t5/Intel-Integrated-Performance/PVS-Studio-VS-IPP-Samples-part-3/m-p/770283#M629</link>
      <description>There is a discussion on '&lt;STRONG&gt;Intel C++ Compiler&lt;/STRONG&gt;' forum regarding '&lt;STRONG&gt;novtable&lt;/STRONG&gt;' keyword. Please take a look:&lt;BR /&gt;&lt;BR /&gt; &lt;A href="http://software.intel.com/en-us/forums/showthread.php?t=105736&amp;amp;o=a&amp;amp;s=lr"&gt;http://software.intel.com/en-us/forums/showthread.php?t=105736&amp;amp;o=a&amp;amp;s=lr&lt;/A&gt;&lt;BR /&gt;</description>
      <pubDate>Thu, 14 Jun 2012 00:32:38 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Integrated-Performance/PVS-Studio-VS-IPP-Samples-part-3/m-p/770283#M629</guid>
      <dc:creator>SergeyKostrov</dc:creator>
      <dc:date>2012-06-14T00:32:38Z</dc:date>
    </item>
    <item>
      <title>PVS-Studio VS IPP Samples - part 3</title>
      <link>https://community.intel.com/t5/Intel-Integrated-Performance/PVS-Studio-VS-IPP-Samples-part-3/m-p/770284#M630</link>
      <description>&lt;DIV id="tiny_quote"&gt;&lt;DIV style="margin-left: 2px; margin-right: 2px;"&gt;Quoting &lt;A jquery1342853188375="60" rel="/en-us/services/profile/quick_profile.php?is_paid=&amp;amp;user_id=353541" href="https://community.intel.com/en-us/profile/353541/" class="basic"&gt;Sergey Kostrov&lt;/A&gt;&lt;/DIV&gt;&lt;DIV style="background-color: #e5e5e5; margin-left: 2px; margin-right: 2px; border: 1px inset; padding: 5px;"&gt;&lt;I&gt;There is a discussion on '&lt;STRONG&gt;Intel C++ Compiler&lt;/STRONG&gt;' forum regarding '&lt;STRONG&gt;novtable&lt;/STRONG&gt;' keyword. Please take a look:&lt;BR /&gt;&lt;BR /&gt; &lt;A href="http://software.intel.com/en-us/forums/showthread.php?t=105736&amp;amp;o=a&amp;amp;s=lr"&gt;http://software.intel.com/en-us/forums/showthread.php?t=105736&amp;amp;o=a&amp;amp;s=lr&lt;/A&gt;&lt;BR /&gt;&lt;/I&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;P&gt;&lt;BR /&gt;This is a follow up. Please take a look at:&lt;BR /&gt;&lt;BR /&gt; &lt;A href="http://software.intel.com/en-us/forums/showpost.php?p=190384"&gt;http://software.intel.com/en-us/forums/showpost.php?p=190384&lt;/A&gt;&lt;BR /&gt;&lt;BR /&gt;and&lt;BR /&gt;&lt;BR /&gt; &lt;A href="http://software.intel.com/en-us/forums/showthread.php?t=105257&amp;amp;o=a&amp;amp;s=lr"&gt;http://software.intel.com/en-us/forums/showthread.php?t=105257&amp;amp;o=a&amp;amp;s=lr&lt;/A&gt; ( Post #12 )&lt;BR /&gt;&lt;BR /&gt;and it couldbe even more interesting if'&lt;STRONG&gt;sealed&lt;/STRONG&gt;''&lt;STRONG&gt;final&lt;/STRONG&gt;' keywordsare used.&lt;BR /&gt;&lt;BR /&gt;Best regards,&lt;BR /&gt;Sergey&lt;/P&gt;</description>
      <pubDate>Sat, 21 Jul 2012 06:45:22 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Integrated-Performance/PVS-Studio-VS-IPP-Samples-part-3/m-p/770284#M630</guid>
      <dc:creator>SergeyKostrov</dc:creator>
      <dc:date>2012-07-21T06:45:22Z</dc:date>
    </item>
  </channel>
</rss>

