Index: clang-modernize/Core/Transform.cpp =================================================================== --- clang-modernize/Core/Transform.cpp +++ clang-modernize/Core/Transform.cpp @@ -98,7 +98,13 @@ assert(Overrides != 0 && "Subclass transform didn't provide InputState"); Overrides->applyOverrides(CI.getSourceManager()); - CurrentSource = Filename; + + llvm::SmallString<256> FilePath(Filename); + llvm::error_code EC = llvm::sys::fs::make_absolute(FilePath); + assert(!EC && "File path can't be made absolute"); + (void) EC; + + CurrentSource = FilePath.c_str(); if (Options().EnableTiming) { Timings.push_back(std::make_pair(Filename.str(), llvm::TimeRecord())); Index: test/clang-modernize/Compilations/Inputs/compile_commands_rel.json =================================================================== --- /dev/null +++ test/clang-modernize/Compilations/Inputs/compile_commands_rel.json @@ -0,0 +1,17 @@ +[ +{ + "directory": "$(path)/a1/", + "command": "clang++ -o compilations.o -c compilations.cpp -std=c++11", + "file": "compilations.cpp" +}, +{ + "directory": "$(path)/a2/", + "command": "clang++ -o compilations.o -c compilations.cpp -std=c++11", + "file": "compilations.cpp" +}, +{ + "directory": "$(path)/a3/", + "command": "clang++ -o compilations.o -c compilations.cpp -std=c++11", + "file": "compilations.cpp" +} +] Index: test/clang-modernize/Compilations/compilation_rel.cpp =================================================================== --- /dev/null +++ test/clang-modernize/Compilations/compilation_rel.cpp @@ -0,0 +1,25 @@ +// The following block tests: +// - Relative paths are use in the compilation database. +// - A compilation database is detected from build path specified by -p and +// -include was provided. + +// Create directory structure +// a1, a2 and a3 are specified paths for files in the compilation database. +// RUN: rm -rf %T/CompilationRel +// RUN: mkdir -p %T/CompilationRel +// RUN: mkdir -p %T/CompilationRel/a1 +// RUN: mkdir -p %T/CompilationRel/a2 +// RUN: mkdir -p %T/CompilationRel/a3 + +// This test uses a compilation database +// RUN: sed -e 's#$(path)#%/T/CompilationRel#g' %S/Inputs/compile_commands_rel.json > %T/CompilationRel/compile_commands.json + +// Check that files are tranformed when -p and -include are specified. +// RUN: cp %S/Inputs/compilations.cpp %T/CompilationRel/a1 +// RUN: cp %S/Inputs/compilations.cpp %T/CompilationRel/a2 +// RUN: cp %S/Inputs/compilations.cpp %T/CompilationRel/a3 + +// RUN: clang-modernize -use-nullptr -p=%T/CompilationRel -include=%T/CompilationRel/a1,%T/CompilationRel/a3 +// RUN: diff -b %S/Inputs/compilations_expected.cpp %T/CompilationRel/a1/compilations.cpp +// RUN: not diff -b %S/Inputs/compilations_expected.cpp %T/CompilationRel/a2/compilations.cpp +// RUN: diff -b %S/Inputs/compilations_expected.cpp %T/CompilationRel/a3/compilations.cpp Index: test/clang-modernize/Compilations/no_compilation_rel.cpp =================================================================== --- /dev/null +++ test/clang-modernize/Compilations/no_compilation_rel.cpp @@ -0,0 +1,19 @@ +// The following block tests that files are transformed when specified using +// relative paths. + +// Create directory structure +// a1, a2 and a3 are specified paths for files in the compilation database. +// RUN: rm -rf %T/NoCompilationRel +// RUN: mkdir -p %T/NoCompilationRel +// RUN: mkdir -p %T/NoCompilationRel/a1 +// RUN: mkdir -p %T/NoCompilationRel/a2 +// RUN: mkdir -p %T/NoCompilationRel/a3 + +// RUN: cp %S/Inputs/compilations.cpp %T/NoCompilationRel/a1 +// RUN: cp %S/Inputs/compilations.cpp %T/NoCompilationRel/a2 +// RUN: cp %S/Inputs/compilations.cpp %T/NoCompilationRel/a3 +// RUN: cd %T +// RUN: clang-modernize -use-nullptr ./NoCompilationRel/a1/compilations.cpp ./NoCompilationRel/a3/compilations.cpp +// RUN: diff -b %S/Inputs/compilations_expected.cpp %T/NoCompilationRel/a1/compilations.cpp +// RUN: not diff -b %S/Inputs/compilations_expected.cpp %T/NoCompilationRel/a2/compilations.cpp +// RUN: diff -b %S/Inputs/compilations_expected.cpp %T/NoCompilationRel/a3/compilations.cpp