ICG creates offsetof statements that will not compile when using clang #327

Added a check that was in 15 that tested the platform we are running on.  If we
are on an mac, we want to skip fully qualifying variable names because it creates
code that doesn't compile under clang.
This commit is contained in:
Alex Lin
2016-10-12 13:29:25 -05:00
parent 60348f8335
commit 23af89681e

View File

@ -2,9 +2,15 @@
#include <iostream>
#include <sstream>
#include "ClassValues.hh"
#include "FieldDescription.hh"
#ifdef __APPLE__
#include "llvm/Support/CommandLine.h"
extern llvm::cl::opt< bool > no_offset_of ;
#endif
ClassValues::ClassValues() :
has_init_attr_friend(false) ,
is_pod(false) ,
@ -23,6 +29,11 @@ ClassValues::~ClassValues() {
void ClassValues::addFieldDescription(FieldDescription * in_fdes) {
field_descripts.push_back(in_fdes) ;
#ifdef __APPLE__
if ( no_offset_of ) {
#else
{
#endif
// Test to see if the new field overloads a field of the same name. If it does
// then fully qualify the name of the inherited field (the one already in field_name_to_info).
std::map< std::string , FieldDescription * >::iterator mit = field_name_to_info_map.find(in_fdes->getName()) ;
@ -34,7 +45,7 @@ void ClassValues::addFieldDescription(FieldDescription * in_fdes) {
field_name_to_info_map.erase(mit) ;
}
}
}
field_name_to_info_map[in_fdes->getName()] = in_fdes ;
}
@ -45,6 +56,11 @@ void ClassValues::addInheritedFieldDescriptions(std::vector<FieldDescription *>
std::vector<FieldDescription *>::iterator fdit ;
// Loop through the incoming inherited variable names
#ifdef __APPLE__
if ( no_offset_of ) {
#else
{
#endif
for ( fdit = in_fdes.begin() ; fdit != in_fdes.end() ; fdit++ ) {
(*fdit)->setBaseClassOffset( class_offset ) ;
@ -86,6 +102,7 @@ void ClassValues::addInheritedFieldDescriptions(std::vector<FieldDescription *>
}
}
}
}
}