apicompatanamdw/compatanalysercmd/headeranalyser/src/Analyser.cpp
changeset 3 ebe3f8f03b59
parent 0 638b9c697799
child 12 a0eee409ff14
equal deleted inserted replaced
2:0cb2248d0edc 3:ebe3f8f03b59
    81 Analyser::Analyser(char** args, int argc) : iCPPParser(NULL)
    81 Analyser::Analyser(char** args, int argc) : iCPPParser(NULL)
    82 {
    82 {
    83     iCmdLine = new CommandLine(args, argc);
    83     iCmdLine = new CommandLine(args, argc);
    84     iUseBaselinePlatformData = false;   
    84     iUseBaselinePlatformData = false;   
    85     iUseCurrentPlatformData = false;
    85     iUseCurrentPlatformData = false;
    86     iUseForcedHeaders = true;
       
    87     iBasePlatformData = 0;
    86     iBasePlatformData = 0;
    88     iProductPlatformData = 0;
    87     iProductPlatformData = 0;
    89 }
    88 }
    90 
    89 
    91 // ----------------------------------------------------------------------------
    90 // ----------------------------------------------------------------------------
   912 				// If analysing in bundle, validate for include guard before addition to bundle.
   911 				// If analysing in bundle, validate for include guard before addition to bundle.
   913 				validateHeaders(tmpfiles, invalid);
   912 				validateHeaders(tmpfiles, invalid);
   914 				// Exclude "iInvalidFiles" from bundle analysis. Analyse them only singly. 
   913 				// Exclude "iInvalidFiles" from bundle analysis. Analyse them only singly. 
   915 				if( invalid.size() )
   914 				if( invalid.size() )
   916 				{
   915 				{
   917 					for( int i=0 ; i < invalid.size() ; i++ )
   916 					for( int i=0 ; i < (int)invalid.size() ; i++ )
   918 					{
   917 					{
   919 					
   918 					
   920 						PlatformHeaders::iterator pairIter = FindHeaderPair(invalid[i].first, pfHeaders);
   919 						PlatformHeaders::iterator pairIter = FindHeaderPair(invalid[i].first, pfHeaders);
   921 						//No need to check if the invalid file exists in pfHeaders, as it already done above. 
   920 						//No need to check if the invalid file exists in pfHeaders, as it already done above. 
   922 						HeaderPair temp(pairIter->first, pairIter->second);
   921 						HeaderPair temp(pairIter->first, pairIter->second);
  1128 			// Set temp directories for parsers
  1127 			// Set temp directories for parsers
  1129 			parser->setTemp(iParams.getParameter(TEMPDIR));
  1128 			parser->setTemp(iParams.getParameter(TEMPDIR));
  1130 			parser2->setTemp(iParams.getParameter(TEMPDIR));
  1129 			parser2->setTemp(iParams.getParameter(TEMPDIR));
  1131 
  1130 
  1132 			// Set forced headers 
  1131 			// Set forced headers 
  1133 			if(iUseForcedHeaders)
  1132 			parser->setForcedHeaders(iForcedBaselineHeaders);
  1134 			{
  1133 			parser2->setForcedHeaders(iForcedCurrentHeaders);
  1135 				parser->setForcedHeaders(iForcedBaselineHeaders);
  1134 			
  1136 				parser2->setForcedHeaders(iForcedCurrentHeaders);
       
  1137 			}
       
  1138 
       
  1139 			if (createThread)
  1135 			if (createThread)
  1140 			{		
  1136 			{		
  1141 				//if the number of threads in this group has reached pre-defined max count, destroy all the threads in this group before creating one.
  1137 				//if the number of threads in this group has reached pre-defined max count, destroy all the threads in this group before creating one.
  1142 				//boost::thread_group object does not destroy a thread when it goes to completion. if the threads are not destroyed lot of memory will be eaten up unneccessarily
  1138 				//boost::thread_group object does not destroy a thread when it goes to completion. if the threads are not destroyed lot of memory will be eaten up unneccessarily
  1143 				if(gHeaderThreads.size() >= MAX_THREAD_COUNT)
  1139 				if(gHeaderThreads.size() >= MAX_THREAD_COUNT)
  1297 int Analyser::analyse()
  1293 int Analyser::analyse()
  1298 {
  1294 {
  1299 	// Local variable instantiation
  1295 	// Local variable instantiation
  1300 	int ret = 0;
  1296 	int ret = 0;
  1301 	iHeaderSetInUse = false;
  1297 	iHeaderSetInUse = false;
  1302 	iUseForcedHeaders = true;
       
  1303 	iUseThread = false;
  1298 	iUseThread = false;
  1304 	string epocroot;
  1299 	string epocroot;
  1305 	int bundlesize = 1;
  1300 	int bundlesize = 1;
  1306 	unsigned int amount, amount2;
  1301 	unsigned int amount, amount2;
  1307 	iOnlySystemIncludeRequired = false;
  1302 	iOnlySystemIncludeRequired = false;
  1402 	list<string>::iterator removedbegin = removedFiles.begin();
  1397 	list<string>::iterator removedbegin = removedFiles.begin();
  1403 	list<string>::iterator removedend = removedFiles.end();
  1398 	list<string>::iterator removedend = removedFiles.end();
  1404 	for(; removedbegin != removedend; removedbegin++)
  1399 	for(; removedbegin != removedend; removedbegin++)
  1405 	{
  1400 	{
  1406 		string filename = *removedbegin;
  1401 		string filename = *removedbegin;
  1407 		report.addIssue(filename, "", EIssueIdentityFile, EIssueTypeRemoval, ESeverityBBCBreak, ESeveritySCBreak, "", 0, "","");
  1402 		report.addIssue(filename, "", EIssueIdentityFile, EIssueTypeRemoval, ESeverityBBCBreak, ESeveritySCBreak, "", 0,"", "","");
  1408 	}
  1403 	}
  1409 
  1404 
  1410 	int issues = 0;
  1405 	int issues = 0;
  1411 	PlatformHeaders unsuccessfulHeaders;
  1406 	PlatformHeaders unsuccessfulHeaders;
  1412 	vector<pair<string, string> > unsuccessfulHeaderNames;
  1407 	vector<pair<string, string> > unsuccessfulHeaderNames;
  1481 	mainThreads.join_all(); // wait for all threads in mainThreads to complete
  1476 	mainThreads.join_all(); // wait for all threads in mainThreads to complete
  1482 	compErrors += mergeVectorCompErrs + unsuccessfulCompErrs + platformUnsuccessfulCompErrs;
  1477 	compErrors += mergeVectorCompErrs + unsuccessfulCompErrs + platformUnsuccessfulCompErrs;
  1483 	report.finishReport();
  1478 	report.finishReport();
  1484 
  1479 
  1485 	// List number of files which had compilation errors and could not be compiled	
  1480 	// List number of files which had compilation errors and could not be compiled	
  1486 	if ( _current_files + excludedHeaderSize < _total_files )
  1481 	if ( _current_files + (int)excludedHeaderSize < _total_files )
  1487 		cout << "\n" << ( _total_files - (_current_files + excludedHeaderSize) ) <<"  files out of " << _total_files << " had some issues and could not be analysed.\n" << endl;
  1482 		cout << "\n" << ( _total_files - (_current_files + excludedHeaderSize) ) <<"  files out of " << _total_files << " had some issues and could not be analysed.\n" << endl;
  1488 
  1483 
  1489 	// Wrap up the run and print statistics
  1484 	// Wrap up the run and print statistics
  1490 	unsigned int count = _total_files * 2;
  1485 	unsigned int count = _total_files * 2;
  1491 
  1486 
  1566 					bundlesize == 1 )
  1561 					bundlesize == 1 )
  1567 
  1562 
  1568 				{
  1563 				{
  1569 					if( basebegin != baseend )
  1564 					if( basebegin != baseend )
  1570 					{
  1565 					{
  1571 						if(!iUseForcedHeaders)
  1566 						//Add compilation error to the report
  1572 						{
  1567 						string compilationError = iCompErrTxt;
  1573 							//Add compilation error to the report
  1568 						report.addIssue((*basebegin), "", EIssueIdentityFile, EIssueTypeCompilationError, ESeverityBBCBreak, ESeveritySCBreak, "", 0,"",
  1574 							string compilationError = iCompErrTxt;
  1569 							(*currentbegin),compilationError);
  1575 							report.addIssue((*basebegin), "", EIssueIdentityFile, EIssueTypeCompilationError, ESeverityBBCBreak, ESeveritySCBreak, "", 0,
  1570 						issues++;
  1576 								(*currentbegin),compilationError);
  1571 
  1577 							issues++;						
       
  1578 						}
       
  1579 						else
       
  1580 							unsuccessfulHeaders.push_back(pair<string,string>(*basebegin,*currentbegin));
       
  1581 							
       
  1582 						compErrors++;
  1572 						compErrors++;
  1583 					}
  1573 					}
  1584 				}
  1574 				}
  1585 				else
  1575 				else
  1586 				{
  1576 				{
  1590 						stringvector curfilename;
  1580 						stringvector curfilename;
  1591 						basefilename.push_back(*basebegin);
  1581 						basefilename.push_back(*basebegin);
  1592 						curfilename.push_back(*currentbegin);
  1582 						curfilename.push_back(*currentbegin);
  1593 						if (!AnalyseBundle(basefilename,curfilename,report, issues))
  1583 						if (!AnalyseBundle(basefilename,curfilename,report, issues))
  1594 						{
  1584 						{
  1595 							if(!iUseForcedHeaders)
  1585 							//Add compilation error to the report						
  1596 							{
  1586 							string compilationError = iCompErrTxt;
  1597 								//Add compilation error to the report						
  1587 							report.addIssue((*basebegin), "", EIssueIdentityFile, EIssueTypeCompilationError, ESeverityBBCBreak, ESeveritySCBreak, "", 0,"",
  1598 								string compilationError = iCompErrTxt;
  1588 								(*currentbegin),compilationError);
  1599 								report.addIssue((*basebegin), "", EIssueIdentityFile, EIssueTypeCompilationError, ESeverityBBCBreak, ESeveritySCBreak, "", 0,
  1589 							issues++;								
  1600 									(*currentbegin),compilationError);
       
  1601 								issues++;								
       
  1602 							}
       
  1603 							else
       
  1604 								unsuccessfulHeaders.push_back(pair<string,string>(*basebegin,*currentbegin));
       
  1605 							
       
  1606 							compErrors++;
  1590 							compErrors++;
  1607 						}
  1591 						}
  1608 						basebegin++;
  1592 						basebegin++;
  1609 						currentbegin++;
  1593 						currentbegin++;
  1610 					}
  1594 					}
  1616 
  1600 
  1617 		fnmapiter++;
  1601 		fnmapiter++;
  1618 		processedcount++;
  1602 		processedcount++;
  1619 	}
  1603 	}
  1620 	
  1604 	
  1621 	if( compErrors > 0 && iUseForcedHeaders )
  1605     if (iNotRemovedFiles.size() != 0)
  1622 	{
       
  1623 		iUseForcedHeaders = false;
       
  1624 		issues = 0;
       
  1625 		compErrors = 0;   
       
  1626 		AnalyseHeaders(unsuccessfulHeaders, 1, report, issues, compErrors);
       
  1627 		iUseForcedHeaders = true;
       
  1628 	}
       
  1629 	
       
  1630 	if (iNotRemovedFiles.size() != 0)
       
  1631 	{            
  1606 	{            
  1632 		list<string> tempvar;
  1607 		list<string> tempvar;
  1633 		list<string>::iterator removefile = iNotRemovedFiles.begin();
  1608 		list<string>::iterator removefile = iNotRemovedFiles.begin();
  1634 		list<string>::iterator fileend = iNotRemovedFiles.end();
  1609 		list<string>::iterator fileend = iNotRemovedFiles.end();
  1635 		for(; removefile != fileend; removefile++)
  1610 		for(; removefile != fileend; removefile++)
  1676 	{
  1651 	{
  1677 		parser = new CPPParser(iParams.getParameter(BASELINEPLAT));
  1652 		parser = new CPPParser(iParams.getParameter(BASELINEPLAT));
  1678 		// Set temp directory for parser
  1653 		// Set temp directory for parser
  1679 		parser->setTemp(iParams.getParameter(TEMPDIR));
  1654 		parser->setTemp(iParams.getParameter(TEMPDIR));
  1680 		// Set forced headers
  1655 		// Set forced headers
  1681 		if(iUseForcedHeaders)
       
  1682 		parser->setForcedHeaders(iForcedBaselineHeaders);
  1656 		parser->setForcedHeaders(iForcedBaselineHeaders);
  1683 		// Wrap allocated memory to an auto_ptr to get it deallocated properly.
  1657 		// Wrap allocated memory to an auto_ptr to get it deallocated properly.
  1684 		baseAutoPtr.reset(parser);                                  
  1658 		baseAutoPtr.reset(parser);                                  
  1685 	}
  1659 	}
  1686 	if( currParser )
  1660 	if( currParser )
  1692 	{
  1666 	{
  1693 		parser2 = new CPPParser(iParams.getParameter(CURRENTPLAT));
  1667 		parser2 = new CPPParser(iParams.getParameter(CURRENTPLAT));
  1694 		// Set temp directory for parser
  1668 		// Set temp directory for parser
  1695 		parser2->setTemp(iParams.getParameter(TEMPDIR));
  1669 		parser2->setTemp(iParams.getParameter(TEMPDIR));
  1696 		// Set forced headers
  1670 		// Set forced headers
  1697 		if(iUseForcedHeaders)
       
  1698 		parser2->setForcedHeaders(iForcedCurrentHeaders);
  1671 		parser2->setForcedHeaders(iForcedCurrentHeaders);
  1699 		// Wrap allocated memory to an auto_ptr to get it deallocated properly.
  1672 		// Wrap allocated memory to an auto_ptr to get it deallocated properly.
  1700 		currAutoPtr.reset(parser2);
  1673 		currAutoPtr.reset(parser2);
  1701 	}
  1674 	}
  1702 
  1675 
  1763 			vector<pair<string,string> >::iterator duplicatedend2 = duplicatedbegin->second.end();
  1736 			vector<pair<string,string> >::iterator duplicatedend2 = duplicatedbegin->second.end();
  1764 			for(; duplicatedbegin2 != duplicatedend2; duplicatedbegin2++)
  1737 			for(; duplicatedbegin2 != duplicatedend2; duplicatedbegin2++)
  1765 			{
  1738 			{
  1766 				string macroname = duplicatedbegin2->first;
  1739 				string macroname = duplicatedbegin2->first;
  1767 				int lineNo = atoi(duplicatedbegin2->second.c_str());
  1740 				int lineNo = atoi(duplicatedbegin2->second.c_str());
  1768 				report.addIssue(filename, macroname, EIssueIdentityMacro, EIssueTypeNotAnalysed, ESeverityInformative, ESeveritySCInformative, "", lineNo, "", "");
  1741 				report.addIssue(filename, macroname, EIssueIdentityMacro, EIssueTypeNotAnalysed, ESeverityInformative, ESeveritySCInformative, "", lineNo, "","", "");
  1769 				issues++;
  1742 				issues++;
  1770 			}
  1743 			}
  1771 		}
  1744 		}
  1772 
  1745 
  1773 		// Current
  1746 		// Current
  1782 			vector<pair<string,string> >::iterator duplicatedend2 = duplicatedbegin->second.end();
  1755 			vector<pair<string,string> >::iterator duplicatedend2 = duplicatedbegin->second.end();
  1783 			for(; duplicatedbegin2 != duplicatedend2; duplicatedbegin2++)
  1756 			for(; duplicatedbegin2 != duplicatedend2; duplicatedbegin2++)
  1784 			{
  1757 			{
  1785 				string macroname = duplicatedbegin2->first;
  1758 				string macroname = duplicatedbegin2->first;
  1786 				int lineNo = atoi(duplicatedbegin2->second.c_str());
  1759 				int lineNo = atoi(duplicatedbegin2->second.c_str());
  1787 				report.addIssue("", macroname, EIssueIdentityMacro, EIssueTypeNotAnalysed, ESeverityInformative, ESeveritySCInformative, "", lineNo, filename, "");
  1760 				report.addIssue("", macroname, EIssueIdentityMacro, EIssueTypeNotAnalysed, ESeverityInformative, ESeveritySCInformative, "", lineNo,"", filename, "");
  1788 				issues++;
  1761 				issues++;
  1789 			}
  1762 			}
  1790 		}
  1763 		}
  1791 
  1764 
  1792 		// Removed macros
  1765 		// Removed macros
  1804 			for(; removedbegin2 != removedend2; removedbegin2++)
  1777 			for(; removedbegin2 != removedend2; removedbegin2++)
  1805 			{
  1778 			{
  1806 				string macroname = removedbegin2->first;
  1779 				string macroname = removedbegin2->first;
  1807 				//int lineNo = atoi(removedbegin2->second.c_str());
  1780 				//int lineNo = atoi(removedbegin2->second.c_str());
  1808 				// No need to pass the line no in removed case.
  1781 				// No need to pass the line no in removed case.
  1809 				report.addIssue(basefilename, macroname, EIssueIdentityMacro, EIssueTypeRemoval, ESeverityPossibleBBCBreak, ESeveritySCBreak, "", 0, currentfilename, "");
  1782 				report.addIssue(basefilename, macroname, EIssueIdentityMacro, EIssueTypeRemoval, ESeverityPossibleBBCBreak, ESeveritySCBreak, "", 0,"", currentfilename, "");
  1810 				issues++;
  1783 				issues++;
  1811 			}
  1784 			}
  1812 		}
  1785 		}
  1813 
  1786 
  1814 		// Changed macros
  1787 		// Changed macros
  1826 			for(; changedbegin2 != changedend2; changedbegin2++)
  1799 			for(; changedbegin2 != changedend2; changedbegin2++)
  1827 			{
  1800 			{
  1828 				string macroname = changedbegin2->first;
  1801 				string macroname = changedbegin2->first;
  1829 				string newcode = changedbegin2->second.first.second;
  1802 				string newcode = changedbegin2->second.first.second;
  1830 				int lineNo = atoi(changedbegin2->second.second.c_str());
  1803 				int lineNo = atoi(changedbegin2->second.second.c_str());
  1831 				report.addIssue(basefilename, macroname, EIssueIdentityMacro, EIssueTypeChange, ESeverityPossibleBBCBreak, ESeveritySCNULL, newcode, lineNo, currentfilename, "");
  1804 				report.addIssue(basefilename, macroname, EIssueIdentityMacro, EIssueTypeChange, ESeverityPossibleBBCBreak, ESeveritySCNULL, newcode, lineNo, "",currentfilename, "");
  1832 				issues++;
  1805 				issues++;
  1833 			}
  1806 			}
  1834 		}
  1807 		}
  1835 
  1808 
  1836 		
  1809 		
  2644 
  2617 
  2645 					if ( fileMatched = false )
  2618 					if ( fileMatched = false )
  2646 					{
  2619 					{
  2647 						// file does not exists in curdir
  2620 						// file does not exists in curdir
  2648 						report.addIssue(baseResource.RHFileName, includes.at(out).first, EIssueIdentityFile, 
  2621 						report.addIssue(baseResource.RHFileName, includes.at(out).first, EIssueIdentityFile, 
  2649 							EIssueTypeRemoval,ESeverityBBCBreak,ESeveritySCNULL, "", 0, curResource.RHFileName,"");
  2622 							EIssueTypeRemoval,ESeverityBBCBreak,ESeveritySCNULL, "", 0, "",curResource.RHFileName,"");
  2650 						break;
  2623 						break;
  2651 					}
  2624 					}
  2652 				}
  2625 				}
  2653 				if(includedHeaderPresent == false)
  2626 				if(includedHeaderPresent == false)
  2654 				{
  2627 				{
  2655 					// add issue, as field is removed in current file.
  2628 					// add issue, as field is removed in current file.
  2656 					report.addIssue(baseResource.RHFileName, bString, EIssueIdentityField, 
  2629 					report.addIssue(baseResource.RHFileName, bString, EIssueIdentityField, 
  2657 						EIssueTypeRemoval,ESeverityNULL,ESeveritySCBreak, "", 0, curResource.RHFileName,"");
  2630 						EIssueTypeRemoval,ESeverityNULL,ESeveritySCBreak, "", 0, "",curResource.RHFileName,"");
  2658 				}
  2631 				}
  2659 			}
  2632 			}
  2660 
  2633 
  2661 			for(int l = 0; l < (int)includes.size(); l++ )
  2634 			for(int l = 0; l < (int)includes.size(); l++ )
  2662 			{
  2635 			{
  3195 									//add issue	member value mismatch		
  3168 									//add issue	member value mismatch		
  3196 									string bVal = baseStruct.structName + "::" + baseStruct.members.at(bInner).elementName;
  3169 									string bVal = baseStruct.structName + "::" + baseStruct.members.at(bInner).elementName;
  3197 									string cVal = curStruct.members.at(cInner).elementValue;
  3170 									string cVal = curStruct.members.at(cInner).elementValue;
  3198 									int lineNo = curStruct.members.at(cInner).lineNo;
  3171 									int lineNo = curStruct.members.at(cInner).lineNo;
  3199 									report.addIssue(baseResource.RHFileName, bVal, EIssueIdentityStructMember, EIssueTypeChangeInInitialisation, 
  3172 									report.addIssue(baseResource.RHFileName, bVal, EIssueIdentityStructMember, EIssueTypeChangeInInitialisation, 
  3200 										ESeverityNULL, ESeveritySCBreak, cVal, lineNo,curResource.RHFileName,"");
  3173 										ESeverityNULL, ESeveritySCBreak, cVal, lineNo,"",curResource.RHFileName,"");
  3201 								} 
  3174 								} 
  3202 							}
  3175 							}
  3203 							else
  3176 							else
  3204 							{
  3177 							{
  3205 								// add issue tyechange
  3178 								// add issue tyechange
  3206 								string bType = baseStruct.structName + "::" + baseStruct.members.at(bInner).elementName;
  3179 								string bType = baseStruct.structName + "::" + baseStruct.members.at(bInner).elementName;
  3207 								string cType = curStruct.members.at(cInner).elementType;
  3180 								string cType = curStruct.members.at(cInner).elementType;
  3208 								int lineNo = curStruct.members.at(cInner).lineNo;
  3181 								int lineNo = curStruct.members.at(cInner).lineNo;
  3209 								report.addIssue(baseResource.RHFileName, bType, EIssueIdentityStructMember, EIssueTypeChangeInType, 
  3182 								report.addIssue(baseResource.RHFileName, bType, EIssueIdentityStructMember, EIssueTypeChangeInType, 
  3210 									ESeverityNULL, ESeveritySCBreak, cType, lineNo,curResource.RHFileName,"");
  3183 									ESeverityNULL, ESeveritySCBreak, cType, lineNo,"",curResource.RHFileName,"");
  3211 							}
  3184 							}
  3212 
  3185 
  3213 							break;
  3186 							break;
  3214 
  3187 
  3215 						}// memeber name matched
  3188 						}// memeber name matched
  3219 					{
  3192 					{
  3220 						// Add Issue Member not found  // baseStruct.members.at(bInner)
  3193 						// Add Issue Member not found  // baseStruct.members.at(bInner)
  3221 						string bMember = baseStruct.structName + "::" + baseStruct.members.at(bInner).elementName;
  3194 						string bMember = baseStruct.structName + "::" + baseStruct.members.at(bInner).elementName;
  3222 						int lineNo = curStruct.lineNo;
  3195 						int lineNo = curStruct.lineNo;
  3223 						report.addIssue(baseResource.RHFileName, bMember, EIssueIdentityStructMember, EIssueTypeRemoval, 
  3196 						report.addIssue(baseResource.RHFileName, bMember, EIssueIdentityStructMember, EIssueTypeRemoval, 
  3224 							ESeverityNULL,ESeveritySCBreak, "", lineNo,curResource.RHFileName,"");
  3197 							ESeverityNULL,ESeveritySCBreak, "", lineNo,"",curResource.RHFileName,"");
  3225 					}
  3198 					}
  3226 				}// loop base struct member
  3199 				}// loop base struct member
  3227 
  3200 
  3228 			}// struct name match
  3201 			}// struct name match
  3229 		}// loop curr structs
  3202 		}// loop curr structs
  3230 
  3203 
  3231 		if( structFound == false )
  3204 		if( structFound == false )
  3232 		{ 
  3205 		{ 
  3233 			//Add issue struct not found
  3206 			//Add issue struct not found
  3234 			report.addIssue(baseResource.RHFileName, baseStruct.structName, EIssueIdentityStruct, EIssueTypeRemoval, 
  3207 			report.addIssue(baseResource.RHFileName, baseStruct.structName, EIssueIdentityStruct, EIssueTypeRemoval, 
  3235 				ESeverityNULL, ESeveritySCBreak, "", 0,curResource.RHFileName,"");
  3208 				ESeverityNULL, ESeveritySCBreak, "", 0,"",curResource.RHFileName,"");
  3236 		}
  3209 		}
  3237 	}//loop base structs
  3210 	}//loop base structs
  3238 
  3211 
  3239 	// --------------Enum Comparison ------------
  3212 	// --------------Enum Comparison ------------
  3240 	vector<EnumMember>baseEnumNameEmptyMemberList;
  3213 	vector<EnumMember>baseEnumNameEmptyMemberList;
  3309 									string baseEnumVal = baseEnum.enumName +"::" + baseEnum.enums.at(outer).enumMemName;
  3282 									string baseEnumVal = baseEnum.enumName +"::" + baseEnum.enums.at(outer).enumMemName;
  3310 									string curEnumVal = curEnum.enums.at(inner).enumVal;
  3283 									string curEnumVal = curEnum.enums.at(inner).enumVal;
  3311 									int lineNo = curEnum.enums.at(inner).lineNo;
  3284 									int lineNo = curEnum.enums.at(inner).lineNo;
  3312 
  3285 
  3313 									report.addIssue(baseResource.RHFileName, baseEnumVal, EIssueIdentityEnumerationValue, EIssueTypeChangeInInitialisation, 
  3286 									report.addIssue(baseResource.RHFileName, baseEnumVal, EIssueIdentityEnumerationValue, EIssueTypeChangeInInitialisation, 
  3314 										ESeverityNULL, ESeveritySCBreak, curEnumVal, lineNo,curResource.RHFileName,"");
  3287 										ESeverityNULL, ESeveritySCBreak, curEnumVal, lineNo,"",curResource.RHFileName,"");
  3315 								}
  3288 								}
  3316 							}
  3289 							}
  3317 							break;
  3290 							break;
  3318 						}
  3291 						}
  3319 					} // loop cur mems
  3292 					} // loop cur mems
  3322 					{ 
  3295 					{ 
  3323 						// Add Enum Member Missing
  3296 						// Add Enum Member Missing
  3324 						string bMemName = baseEnum.enumName +"::" + baseEnum.enums.at(outer).enumMemName;
  3297 						string bMemName = baseEnum.enumName +"::" + baseEnum.enums.at(outer).enumMemName;
  3325 						int lineNo = curEnum.lineNo;
  3298 						int lineNo = curEnum.lineNo;
  3326 						report.addIssue(baseResource.RHFileName, bMemName, EIssueIdentityEnumerationValue, EIssueTypeRemoval, 
  3299 						report.addIssue(baseResource.RHFileName, bMemName, EIssueIdentityEnumerationValue, EIssueTypeRemoval, 
  3327 							ESeverityNULL, ESeveritySCBreak, "", lineNo,curResource.RHFileName,"");
  3300 							ESeverityNULL, ESeveritySCBreak, "", lineNo,"",curResource.RHFileName,"");
  3328 
  3301 
  3329 					}
  3302 					}
  3330 				}// loop base mems
  3303 				}// loop base mems
  3331 
  3304 
  3332 				break;
  3305 				break;
  3337 		{
  3310 		{
  3338 			// Enum List missing
  3311 			// Enum List missing
  3339 			string bEnum = baseEnum.enumName;
  3312 			string bEnum = baseEnum.enumName;
  3340 			string cEnum = curEnum.enumName;
  3313 			string cEnum = curEnum.enumName;
  3341 			report.addIssue(baseResource.RHFileName, bEnum, EIssueIdentityEnumerationValue, EIssueTypeRemoval, 
  3314 			report.addIssue(baseResource.RHFileName, bEnum, EIssueIdentityEnumerationValue, EIssueTypeRemoval, 
  3342 				ESeverityNULL, ESeveritySCBreak, cEnum, 0,curResource.RHFileName,"");
  3315 				ESeverityNULL, ESeveritySCBreak, cEnum, 0,"",curResource.RHFileName,"");
  3343 		}
  3316 		}
  3344 	}//base enums
  3317 	}//base enums
  3345 
  3318 
  3346 	// Now check for enum list with no enum name, in this case check member name and value
  3319 	// Now check for enum list with no enum name, in this case check member name and value
  3347 	if(baseEnumNameEmptyMemberList.size() > 0)
  3320 	if(baseEnumNameEmptyMemberList.size() > 0)
  3364 						string baseEnumVal = "::" + bEnumMem.enumMemName;
  3337 						string baseEnumVal = "::" + bEnumMem.enumMemName;
  3365 						string curEnumVal = cEnumMem.enumMemName;
  3338 						string curEnumVal = cEnumMem.enumMemName;
  3366 						int lineNo = cEnumMem.lineNo;
  3339 						int lineNo = cEnumMem.lineNo;
  3367 
  3340 
  3368 						report.addIssue(baseResource.RHFileName, baseEnumVal, EIssueIdentityEnumerationValue, EIssueTypeChangeInInitialisation, 
  3341 						report.addIssue(baseResource.RHFileName, baseEnumVal, EIssueIdentityEnumerationValue, EIssueTypeChangeInInitialisation, 
  3369 							ESeverityNULL, ESeveritySCBreak, curEnumVal, lineNo,curResource.RHFileName,"");
  3342 							ESeverityNULL, ESeveritySCBreak, curEnumVal, lineNo,"",curResource.RHFileName,"");
  3370 					}
  3343 					}
  3371 					break;
  3344 					break;
  3372 				}
  3345 				}
  3373 			}
  3346 			}
  3374 			if(enumMemFound == false)
  3347 			if(enumMemFound == false)
  3375 			{
  3348 			{
  3376 				// add issue enum mem mising
  3349 				// add issue enum mem mising
  3377 				string bMemName = "::" + bEnumMem.enumMemName;
  3350 				string bMemName = "::" + bEnumMem.enumMemName;
  3378 				report.addIssue(baseResource.RHFileName, bMemName, EIssueIdentityEnumerationValue, EIssueTypeRemoval, 
  3351 				report.addIssue(baseResource.RHFileName, bMemName, EIssueIdentityEnumerationValue, EIssueTypeRemoval, 
  3379 					ESeverityNULL, ESeveritySCBreak, "", 0,curResource.RHFileName,"");
  3352 					ESeverityNULL, ESeveritySCBreak, "", 0,"",curResource.RHFileName,"");
  3380 			}
  3353 			}
  3381 		}
  3354 		}
  3382 	}
  3355 	}
  3383 
  3356 
  3384 
  3357 
  3396 				macroFound = true;
  3369 				macroFound = true;
  3397 				if(baseMacro.macroVal != curMacro.macroVal )
  3370 				if(baseMacro.macroVal != curMacro.macroVal )
  3398 				{
  3371 				{
  3399 					//add issue macro value mismatch
  3372 					//add issue macro value mismatch
  3400 					report.addIssue(baseResource.RHFileName, baseMacro.macroName, EIssueIdentityMacro, EIssueTypeChange, 
  3373 					report.addIssue(baseResource.RHFileName, baseMacro.macroName, EIssueIdentityMacro, EIssueTypeChange, 
  3401 						ESeverityNULL, ESeveritySCBreak, curMacro.macroVal, curMacro.lineNo,curResource.RHFileName,"");
  3374 						ESeverityNULL, ESeveritySCBreak, curMacro.macroVal, curMacro.lineNo,"",curResource.RHFileName,"");
  3402 				}
  3375 				}
  3403 				break; // macro name matched
  3376 				break; // macro name matched
  3404 			}
  3377 			}
  3405 
  3378 
  3406 		}
  3379 		}
  3407 
  3380 
  3408 		if (macroFound == false )
  3381 		if (macroFound == false )
  3409 		{
  3382 		{
  3410 			// add issue macro not found
  3383 			// add issue macro not found
  3411 			report.addIssue(baseResource.RHFileName, baseMacro.macroName, EIssueIdentityMacro, EIssueTypeRemoval, 
  3384 			report.addIssue(baseResource.RHFileName, baseMacro.macroName, EIssueIdentityMacro, EIssueTypeRemoval, 
  3412 				ESeverityNULL, ESeveritySCBreak, "", 0,curResource.RHFileName,"");
  3385 				ESeverityNULL, ESeveritySCBreak, "", 0,"",curResource.RHFileName,"");
  3413 		}
  3386 		}
  3414 	}
  3387 	}
  3415 
  3388 
  3416 
  3389 
  3417 
  3390