diff --git a/trick_source/codegen/Interface_Code_Gen/CommentSaver.cpp b/trick_source/codegen/Interface_Code_Gen/CommentSaver.cpp index 942420f2..3a2faddb 100644 --- a/trick_source/codegen/Interface_Code_Gen/CommentSaver.cpp +++ b/trick_source/codegen/Interface_Code_Gen/CommentSaver.cpp @@ -7,15 +7,17 @@ #include "clang/Basic/FileManager.h" #include "CommentSaver.hh" +#include "Utilities.hh" -CommentSaver::CommentSaver(clang::SourceManager & in_sm ) : sm(in_sm) {} +CommentSaver::CommentSaver(clang::CompilerInstance & in_ci , HeaderSearchDirs & in_hsd ) : ci(in_ci) , hsd(in_hsd) {} bool CommentSaver::HandleComment(clang::Preprocessor &PP, clang::SourceRange Comment) { //Comment.getBegin().dump(sm) ; - if ( ! sm.isInSystemHeader(Comment.getBegin()) ) { - std::string file_name = sm.getBufferName(Comment.getBegin()) ; - unsigned int line_no = sm.getSpellingLineNumber(Comment.getBegin()) ; + //if ( ! sm.isInSystemHeader(Comment.getBegin()) ) { + if ( isInUserOrTrickCode( ci , Comment.getBegin() , hsd ) ) { + std::string file_name = ci.getSourceManager().getBufferName(Comment.getBegin()) ; + unsigned int line_no = ci.getSourceManager().getSpellingLineNumber(Comment.getBegin()) ; comment_map[file_name][line_no] = Comment ; } @@ -27,8 +29,8 @@ std::string CommentSaver::getComment( clang::SourceRange sr ) { if ( sr.isValid() ) { /* fsl_begin and fsl_end are two pointers into the header file. We want the text between the two pointers. */ - clang::FullSourceLoc fsl_begin(sr.getBegin() , sm) ; - clang::FullSourceLoc fsl_end(sr.getEnd() , sm) ; + clang::FullSourceLoc fsl_begin(sr.getBegin() , ci.getSourceManager()) ; + clang::FullSourceLoc fsl_end(sr.getEnd() , ci.getSourceManager()) ; std::string comment_text( fsl_begin.getCharacterData() , (size_t)(fsl_end.getCharacterData() - fsl_begin.getCharacterData())) ; return comment_text ; diff --git a/trick_source/codegen/Interface_Code_Gen/CommentSaver.hh b/trick_source/codegen/Interface_Code_Gen/CommentSaver.hh index f26314f7..1c45cb34 100644 --- a/trick_source/codegen/Interface_Code_Gen/CommentSaver.hh +++ b/trick_source/codegen/Interface_Code_Gen/CommentSaver.hh @@ -6,7 +6,7 @@ #include #include "clang/Lex/Preprocessor.h" -#include "clang/Basic/SourceManager.h" +#include "clang/Frontend/CompilerInstance.h" #include "HeaderSearchDirs.hh" @@ -24,7 +24,7 @@ class CommentSaver : public clang::CommentHandler { public: - CommentSaver( clang::SourceManager & in_sm ) ; + CommentSaver( clang::CompilerInstance & in_ci , HeaderSearchDirs & in_hsd ) ; /** Called by the PreProcessor when a comment is parsed. HandleComment saves the comment indexed by file name and line number in the comment map @@ -78,7 +78,9 @@ class CommentSaver : public clang::CommentHandler { private: /** The compiler's source manager. Holds file/line info for everything. */ - clang::SourceManager & sm ; + clang::CompilerInstance & ci ; + + HeaderSearchDirs & hsd ; /** Map of file name to ICG: (No) found */ std::map < std::string , bool > icg_no_found ; diff --git a/trick_source/codegen/Interface_Code_Gen/FieldVisitor.cpp b/trick_source/codegen/Interface_Code_Gen/FieldVisitor.cpp index 14dc7d31..39aa1bff 100644 --- a/trick_source/codegen/Interface_Code_Gen/FieldVisitor.cpp +++ b/trick_source/codegen/Interface_Code_Gen/FieldVisitor.cpp @@ -144,8 +144,8 @@ bool FieldVisitor::VisitDeclaratorDecl( clang::DeclaratorDecl *dd ) { /* Get the source location of this field. */ clang::SourceRange dd_range = dd->getSourceRange() ; - if ( ! ci.getSourceManager().isInSystemHeader(dd_range.getEnd()) ) { - std::string file_name = ci.getSourceManager().getBufferName(dd_range.getEnd()) ; + std::string file_name = ci.getSourceManager().getBufferName(dd_range.getEnd()) ; + if ( isInUserOrTrickCode( ci , dd_range.getEnd() , hsd ) ) { fdes->setLineNo(ci.getSourceManager().getSpellingLineNumber(dd_range.getEnd())) ; /* process comment if neither ICG:(No) or ICG:(NoComment) is present */ if ( ! cs.hasICGNoComment(file_name) and ! hsd.isPathInICGNoComment(file_name) ) { diff --git a/trick_source/codegen/Interface_Code_Gen/main.cpp b/trick_source/codegen/Interface_Code_Gen/main.cpp index 5e95a7eb..c4d1b07d 100644 --- a/trick_source/codegen/Interface_Code_Gen/main.cpp +++ b/trick_source/codegen/Interface_Code_Gen/main.cpp @@ -142,7 +142,7 @@ int main( int argc , char * argv[] ) { hsd.addDefines ( defines ) ; // Add our comment saver as a comment handler in the preprocessor - CommentSaver cs(ci.getSourceManager()) ; + CommentSaver cs(ci, hsd) ; pp.addCommentHandler(&cs) ; PrintAttributes pa( attr_version, hsd, cs, ci, force, sim_services_flag) ; diff --git a/trick_source/codegen/Interface_Code_Gen/makefile b/trick_source/codegen/Interface_Code_Gen/makefile index 1349fb77..a4706060 100644 --- a/trick_source/codegen/Interface_Code_Gen/makefile +++ b/trick_source/codegen/Interface_Code_Gen/makefile @@ -2,13 +2,13 @@ # The config_${HOST_TYPE}.mk file provides LLVM_HOME include ${TRICK_HOME}/share/trick/makefiles/Makefile.common -CC := $(shell $(LLVM_HOME)/bin/$(LLVM_CONFIG) --bindir)/clang -CXX := $(shell $(LLVM_HOME)/bin/$(LLVM_CONFIG) --bindir)/clang++ +CC := $(shell $(LLVM_HOME)/bin/llvm-config --bindir)/clang +CXX := $(shell $(LLVM_HOME)/bin/llvm-config --bindir)/clang++ CXXFLAGS := -I${LLVM_HOME}/include -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -fno-rtti -CLANG_MINOR_GTEQ5 := $(shell expr `$(LLVM_HOME)/bin/$(LLVM_CONFIG) --version | cut -f2 -d. ` \>= 5 ) +CLANG_MINOR_GTEQ5 := $(shell expr `$(LLVM_HOME)/bin/llvm-config --version | cut -f2 -d. ` \>= 5 ) -LLVMLDFLAGS := $(shell $(LLVM_HOME)/bin/$(LLVM_CONFIG) --ldflags) +LLVMLDFLAGS := $(shell $(LLVM_HOME)/bin/llvm-config --ldflags) OBJ_DIR := object_$(TRICK_HOST_CPU) @@ -39,17 +39,17 @@ CLANGLIBS = \ -lclangBasic \ ifeq ($(TRICK_HOST_TYPE),Linux) -CLANGLIBS += $(shell $(LLVM_HOME)/bin/$(LLVM_CONFIG) --libs) +CLANGLIBS += $(shell $(LLVM_HOME)/bin/llvm-config --libs) ifeq ($(CLANG_MINOR_GTEQ5),1) CXXFLAGS += -std=c++11 # Fedora 21 adds -ledit as a system lib, but it isn't installed, or required. -CLANGLIBS += $(filter-out -ledit,$(shell $(LLVM_HOME)/bin/$(LLVM_CONFIG) --system-libs)) +CLANGLIBS += $(filter-out -ledit,$(shell $(LLVM_HOME)/bin/llvm-config --system-libs)) endif endif ifeq ($(TRICK_HOST_TYPE),Darwin) CXXFLAGS += -std=c++11 -CLANGLIBS += -lLLVMOption -lLLVMMCParser -lLLVMBitReader -lLLVMMC -lLLVMSupport $(shell $(LLVM_HOME)/bin/$(LLVM_CONFIG) --system-libs) +CLANGLIBS += -lLLVMOption -lLLVMMCParser -lLLVMBitReader -lLLVMMC -lLLVMSupport $(shell $(LLVM_HOME)/bin/llvm-config --system-libs) endif all: $(ICG)