Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 7 Sep 2019 11:21:49 +0000 (UTC)
From:      Dimitry Andric <dim@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-vendor@freebsd.org
Subject:   svn commit: r351982 - in vendor/clang/dist-release_90: include/clang/Basic lib/AST lib/Driver lib/Driver/ToolChains lib/StaticAnalyzer/Checkers
Message-ID:  <201909071121.x87BLnLd035895@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: dim
Date: Sat Sep  7 11:21:48 2019
New Revision: 351982
URL: https://svnweb.freebsd.org/changeset/base/351982

Log:
  Vendor import of clang release_90 branch r371301:
  https://llvm.org/svn/llvm-project/cfe/branches/release_90@371301

Modified:
  vendor/clang/dist-release_90/include/clang/Basic/DiagnosticDriverKinds.td
  vendor/clang/dist-release_90/lib/AST/ASTContext.cpp
  vendor/clang/dist-release_90/lib/Driver/Driver.cpp
  vendor/clang/dist-release_90/lib/Driver/ToolChains/Clang.cpp
  vendor/clang/dist-release_90/lib/StaticAnalyzer/Checkers/EnumCastOutOfRangeChecker.cpp

Modified: vendor/clang/dist-release_90/include/clang/Basic/DiagnosticDriverKinds.td
==============================================================================
--- vendor/clang/dist-release_90/include/clang/Basic/DiagnosticDriverKinds.td	Sat Sep  7 11:21:46 2019	(r351981)
+++ vendor/clang/dist-release_90/include/clang/Basic/DiagnosticDriverKinds.td	Sat Sep  7 11:21:48 2019	(r351982)
@@ -91,8 +91,6 @@ def err_no_external_assembler : Error<
   "there is no external assembler that can be used on this platform">;
 def err_drv_unable_to_remove_file : Error<
   "unable to remove file: %0">;
-def err_drv_unable_to_set_working_directory : Error <
-  "unable to set working directory: %0">;
 def err_drv_command_failure : Error<
   "unable to execute command: %0">;
 def err_drv_invalid_darwin_version : Error<

Modified: vendor/clang/dist-release_90/lib/AST/ASTContext.cpp
==============================================================================
--- vendor/clang/dist-release_90/lib/AST/ASTContext.cpp	Sat Sep  7 11:21:46 2019	(r351981)
+++ vendor/clang/dist-release_90/lib/AST/ASTContext.cpp	Sat Sep  7 11:21:48 2019	(r351982)
@@ -9814,10 +9814,25 @@ static GVALinkage basicGVALinkageForVariable(const AST
     return StrongLinkage;
 
   case TSK_ExplicitSpecialization:
-    return Context.getTargetInfo().getCXXABI().isMicrosoft() &&
-                   VD->isStaticDataMember()
-               ? GVA_StrongODR
-               : StrongLinkage;
+    if (Context.getTargetInfo().getCXXABI().isMicrosoft()) {
+      // If this is a fully specialized constexpr variable template, pretend it
+      // was marked inline. MSVC 14.21.27702 headers define _Is_integral in a
+      // header this way, and we don't want to emit non-discardable definitions
+      // of these variables in every TU that includes <type_traits>. This
+      // behavior is non-conforming, since another TU could use an extern
+      // template declaration for this variable, but for constexpr variables,
+      // it's unlikely for a user to want to do that. This behavior can be
+      // removed if the headers change to explicitly mark such variable template
+      // specializations inline.
+      if (isa<VarTemplateSpecializationDecl>(VD) && VD->isConstexpr())
+        return GVA_DiscardableODR;
+
+      // Use ODR linkage for static data members of fully specialized templates
+      // to prevent duplicate definition errors with MSVC.
+      if (VD->isStaticDataMember())
+        return GVA_StrongODR;
+    }
+    return StrongLinkage;
 
   case TSK_ExplicitInstantiationDefinition:
     return GVA_StrongODR;

Modified: vendor/clang/dist-release_90/lib/Driver/Driver.cpp
==============================================================================
--- vendor/clang/dist-release_90/lib/Driver/Driver.cpp	Sat Sep  7 11:21:46 2019	(r351981)
+++ vendor/clang/dist-release_90/lib/Driver/Driver.cpp	Sat Sep  7 11:21:48 2019	(r351982)
@@ -133,7 +133,7 @@ Driver::Driver(StringRef ClangExecutable, StringRef Ta
 
   // Provide a sane fallback if no VFS is specified.
   if (!this->VFS)
-    this->VFS = llvm::vfs::createPhysicalFileSystem().release();
+    this->VFS = llvm::vfs::getRealFileSystem();
 
   Name = llvm::sys::path::filename(ClangExecutable);
   Dir = llvm::sys::path::parent_path(ClangExecutable);
@@ -1010,11 +1010,6 @@ Compilation *Driver::BuildCompilation(ArrayRef<const c
     }
   }
 
-  // Check for working directory option before accessing any files
-  if (Arg *WD = Args.getLastArg(options::OPT_working_directory))
-    if (VFS->setCurrentWorkingDirectory(WD->getValue()))
-      Diag(diag::err_drv_unable_to_set_working_directory) << WD->getValue();
-
   // FIXME: This stuff needs to go into the Compilation, not the driver.
   bool CCCPrintPhases;
 
@@ -1995,11 +1990,20 @@ bool Driver::DiagnoseInputExistence(const DerivedArgLi
   if (Value == "-")
     return true;
 
-  if (getVFS().exists(Value))
+  SmallString<64> Path(Value);
+  if (Arg *WorkDir = Args.getLastArg(options::OPT_working_directory)) {
+    if (!llvm::sys::path::is_absolute(Path)) {
+      SmallString<64> Directory(WorkDir->getValue());
+      llvm::sys::path::append(Directory, Value);
+      Path.assign(Directory);
+    }
+  }
+
+  if (getVFS().exists(Path))
     return true;
 
   if (IsCLMode()) {
-    if (!llvm::sys::path::is_absolute(Twine(Value)) &&
+    if (!llvm::sys::path::is_absolute(Twine(Path)) &&
         llvm::sys::Process::FindInEnvPath("LIB", Value))
       return true;
 
@@ -2025,12 +2029,12 @@ bool Driver::DiagnoseInputExistence(const DerivedArgLi
     if (getOpts().findNearest(Value, Nearest, IncludedFlagsBitmask,
                               ExcludedFlagsBitmask) <= 1) {
       Diag(clang::diag::err_drv_no_such_file_with_suggestion)
-          << Value << Nearest;
+          << Path << Nearest;
       return false;
     }
   }
 
-  Diag(clang::diag::err_drv_no_such_file) << Value;
+  Diag(clang::diag::err_drv_no_such_file) << Path;
   return false;
 }
 

Modified: vendor/clang/dist-release_90/lib/Driver/ToolChains/Clang.cpp
==============================================================================
--- vendor/clang/dist-release_90/lib/Driver/ToolChains/Clang.cpp	Sat Sep  7 11:21:46 2019	(r351981)
+++ vendor/clang/dist-release_90/lib/Driver/ToolChains/Clang.cpp	Sat Sep  7 11:21:48 2019	(r351982)
@@ -603,15 +603,16 @@ static bool shouldUseLeafFramePointer(const ArgList &A
 }
 
 /// Add a CC1 option to specify the debug compilation directory.
-static void addDebugCompDirArg(const ArgList &Args, ArgStringList &CmdArgs,
-                               const llvm::vfs::FileSystem &VFS) {
+static void addDebugCompDirArg(const ArgList &Args, ArgStringList &CmdArgs) {
   if (Arg *A = Args.getLastArg(options::OPT_fdebug_compilation_dir)) {
     CmdArgs.push_back("-fdebug-compilation-dir");
     CmdArgs.push_back(A->getValue());
-  } else if (llvm::ErrorOr<std::string> CWD =
-                 VFS.getCurrentWorkingDirectory()) {
-    CmdArgs.push_back("-fdebug-compilation-dir");
-    CmdArgs.push_back(Args.MakeArgString(*CWD));
+  } else {
+    SmallString<128> cwd;
+    if (!llvm::sys::fs::current_path(cwd)) {
+      CmdArgs.push_back("-fdebug-compilation-dir");
+      CmdArgs.push_back(Args.MakeArgString(cwd));
+    }
   }
 }
 
@@ -877,8 +878,13 @@ static void addPGOAndCoverageFlags(const ToolChain &TC
       else
         OutputFilename = llvm::sys::path::filename(Output.getBaseInput());
       SmallString<128> CoverageFilename = OutputFilename;
-      if (llvm::sys::path::is_relative(CoverageFilename))
-        (void)D.getVFS().makeAbsolute(CoverageFilename);
+      if (llvm::sys::path::is_relative(CoverageFilename)) {
+        SmallString<128> Pwd;
+        if (!llvm::sys::fs::current_path(Pwd)) {
+          llvm::sys::path::append(Pwd, CoverageFilename);
+          CoverageFilename.swap(Pwd);
+        }
+      }
       llvm::sys::path::replace_extension(CoverageFilename, "gcno");
       CmdArgs.push_back(Args.MakeArgString(CoverageFilename));
 
@@ -4365,7 +4371,7 @@ void Clang::ConstructJob(Compilation &C, const JobActi
     CmdArgs.push_back("-fno-autolink");
 
   // Add in -fdebug-compilation-dir if necessary.
-  addDebugCompDirArg(Args, CmdArgs, D.getVFS());
+  addDebugCompDirArg(Args, CmdArgs);
 
   addDebugPrefixMapArg(D, Args, CmdArgs);
 
@@ -6092,7 +6098,7 @@ void ClangAs::ConstructJob(Compilation &C, const JobAc
     DebugInfoKind = (WantDebug ? codegenoptions::LimitedDebugInfo
                                : codegenoptions::NoDebugInfo);
     // Add the -fdebug-compilation-dir flag if needed.
-    addDebugCompDirArg(Args, CmdArgs, C.getDriver().getVFS());
+    addDebugCompDirArg(Args, CmdArgs);
 
     addDebugPrefixMapArg(getToolChain().getDriver(), Args, CmdArgs);
 

Modified: vendor/clang/dist-release_90/lib/StaticAnalyzer/Checkers/EnumCastOutOfRangeChecker.cpp
==============================================================================
--- vendor/clang/dist-release_90/lib/StaticAnalyzer/Checkers/EnumCastOutOfRangeChecker.cpp	Sat Sep  7 11:21:46 2019	(r351981)
+++ vendor/clang/dist-release_90/lib/StaticAnalyzer/Checkers/EnumCastOutOfRangeChecker.cpp	Sat Sep  7 11:21:48 2019	(r351982)
@@ -91,6 +91,22 @@ void EnumCastOutOfRangeChecker::reportWarning(CheckerC
 
 void EnumCastOutOfRangeChecker::checkPreStmt(const CastExpr *CE,
                                              CheckerContext &C) const {
+
+  // Only perform enum range check on casts where such checks are valid.  For
+  // all other cast kinds (where enum range checks are unnecessary or invalid),
+  // just return immediately.  TODO: The set of casts whitelisted for enum
+  // range checking may be incomplete.  Better to add a missing cast kind to
+  // enable a missing check than to generate false negatives and have to remove
+  // those later.
+  switch (CE->getCastKind()) {
+  case CK_IntegralCast:
+    break;
+
+  default:
+    return;
+    break;
+  }
+
   // Get the value of the expression to cast.
   const llvm::Optional<DefinedOrUnknownSVal> ValueToCast =
       C.getSVal(CE->getSubExpr()).getAs<DefinedOrUnknownSVal>();



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201909071121.x87BLnLd035895>