r203614 - lex: improve include handling on Linux for Windows

Nico Weber thakis at chromium.org
Tue Mar 11 15:55:31 PDT 2014


Huh, did you see Richard's comments on the review for this patch?


On Tue, Mar 11, 2014 at 3:41 PM, Saleem Abdulrasool
<compnerd at compnerd.org>wrote:

> Author: compnerd
> Date: Tue Mar 11 17:41:45 2014
> New Revision: 203614
>
> URL: http://llvm.org/viewvc/llvm-project?rev=203614&view=rev
> Log:
> lex: improve include handling on Linux for Windows
>
> Normalise the path separator character on non-windows platforms.  Although
> this
> would work on Windows as well (most newer versions of Windows support
> either '/'
> or '\' as a path separator character), it could potentially cause problems
> with
> full UNC paths.  This change enables the use of the Windows SDK on Linux
> which
> will not accept '\' as a path separator.
>
> Modified:
>     cfe/trunk/lib/Lex/PPDirectives.cpp
>
> Modified: cfe/trunk/lib/Lex/PPDirectives.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Lex/PPDirectives.cpp?rev=203614&r1=203613&r2=203614&view=diff
>
> ==============================================================================
> --- cfe/trunk/lib/Lex/PPDirectives.cpp (original)
> +++ cfe/trunk/lib/Lex/PPDirectives.cpp Tue Mar 11 17:41:45 2014
> @@ -25,6 +25,7 @@
>  #include "clang/Lex/Pragma.h"
>  #include "llvm/ADT/APInt.h"
>  #include "llvm/Support/ErrorHandling.h"
> +#include "llvm/Support/FileSystem.h"
>  #include "llvm/Support/SaveAndRestore.h"
>  using namespace clang;
>
> @@ -1449,9 +1450,15 @@ void Preprocessor::HandleIncludeDirectiv
>    // the path.
>    ModuleMap::KnownHeader SuggestedModule;
>    SourceLocation FilenameLoc = FilenameTok.getLocation();
> +  SmallString<1024> NormalizedPath;
> +  if (LangOpts.MSVCCompat) {
> +    NormalizedPath = Filename.str();
> +    llvm::sys::fs::normalize_separators(NormalizedPath);
> +  }
>    const FileEntry *File = LookupFile(
> -      FilenameLoc, Filename, isAngled, LookupFrom, CurDir,
> -      Callbacks ? &SearchPath : NULL, Callbacks ? &RelativePath : NULL,
> +      FilenameLoc, LangOpts.MSVCCompat ? NormalizedPath.c_str() :
> Filename,
> +      isAngled, LookupFrom, CurDir, Callbacks ? &SearchPath : NULL,
> +      Callbacks ? &RelativePath : NULL,
>        HeaderInfo.getHeaderSearchOpts().ModuleMaps ? &SuggestedModule : 0);
>
>    if (Callbacks) {
> @@ -1465,8 +1472,11 @@ void Preprocessor::HandleIncludeDirectiv
>            HeaderInfo.AddSearchPath(DL, isAngled);
>
>            // Try the lookup again, skipping the cache.
> -          File = LookupFile(FilenameLoc, Filename, isAngled, LookupFrom,
> CurDir,
> -                            0, 0,
> HeaderInfo.getHeaderSearchOpts().ModuleMaps
> +          File = LookupFile(FilenameLoc,
> +                            LangOpts.MSVCCompat ? NormalizedPath.c_str()
> +                                                : Filename,
> +                            isAngled, LookupFrom, CurDir, 0, 0,
> +                            HeaderInfo.getHeaderSearchOpts().ModuleMaps
>                                        ? &SuggestedModule
>                                        : 0,
>                              /*SkipCache*/ true);
> @@ -1476,10 +1486,11 @@ void Preprocessor::HandleIncludeDirectiv
>
>      if (!SuggestedModule || !getLangOpts().Modules) {
>        // Notify the callback object that we've seen an inclusion
> directive.
> -      Callbacks->InclusionDirective(HashLoc, IncludeTok, Filename,
> isAngled,
> -                                    FilenameRange, File,
> -                                    SearchPath, RelativePath,
> -                                    /*ImportedModule=*/0);
> +      Callbacks->InclusionDirective(HashLoc, IncludeTok,
> +                                    LangOpts.MSVCCompat ?
> NormalizedPath.c_str()
> +                                                        : Filename,
> +                                    isAngled, FilenameRange, File,
> SearchPath,
> +                                    RelativePath, /*ImportedModule=*/0);
>      }
>    }
>
> @@ -1490,8 +1501,9 @@ void Preprocessor::HandleIncludeDirectiv
>        // provide the user with a possible fixit.
>        if (isAngled) {
>          File = LookupFile(
> -            FilenameLoc, Filename, false, LookupFrom, CurDir,
> -            Callbacks ? &SearchPath : 0, Callbacks ? &RelativePath : 0,
> +            FilenameLoc, LangOpts.MSVCCompat ? NormalizedPath.c_str() :
> Filename,
> +            false, LookupFrom, CurDir, Callbacks ? &SearchPath : 0,
> +            Callbacks ? &RelativePath : 0,
>              HeaderInfo.getHeaderSearchOpts().ModuleMaps ?
> &SuggestedModule : 0);
>          if (File) {
>            SourceRange Range(FilenameTok.getLocation(), CharEnd);
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20140311/76585088/attachment.html>


More information about the cfe-commits mailing list