Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 14 Feb 2020 21:24:03 +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: r357937 - in vendor/llvm-project/release-10.x: clang/include/clang/AST clang/include/clang/Basic clang/include/clang/Driver clang/include/clang/Lex clang/include/clang/Sema clang/lib/AS...
Message-ID:  <202002142124.01ELO3OE000767@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: dim
Date: Fri Feb 14 21:24:03 2020
New Revision: 357937
URL: https://svnweb.freebsd.org/changeset/base/357937

Log:
  Vendor import of llvm-project branch release/10.x
  llvmorg-10.0.0-rc2-0-g90c78073f73.

Added:
  vendor/llvm-project/release-10.x/llvm/lib/Target/RISCV/RISCVSchedRocket32.td
  vendor/llvm-project/release-10.x/llvm/lib/Target/RISCV/RISCVSchedRocket64.td
  vendor/llvm-project/release-10.x/llvm/lib/Target/RISCV/RISCVSchedule.td
Deleted:
  vendor/llvm-project/release-10.x/llvm/lib/Target/AMDGPU/SIRemoveShortExecBranches.cpp
Modified:
  vendor/llvm-project/release-10.x/clang/include/clang/AST/ASTConcept.h
  vendor/llvm-project/release-10.x/clang/include/clang/AST/ExprConcepts.h
  vendor/llvm-project/release-10.x/clang/include/clang/Basic/Cuda.h
  vendor/llvm-project/release-10.x/clang/include/clang/Basic/DiagnosticDriverKinds.td
  vendor/llvm-project/release-10.x/clang/include/clang/Basic/DiagnosticGroups.td
  vendor/llvm-project/release-10.x/clang/include/clang/Basic/DiagnosticSemaKinds.td
  vendor/llvm-project/release-10.x/clang/include/clang/Driver/CC1Options.td
  vendor/llvm-project/release-10.x/clang/include/clang/Driver/Job.h
  vendor/llvm-project/release-10.x/clang/include/clang/Lex/PreprocessorOptions.h
  vendor/llvm-project/release-10.x/clang/include/clang/Sema/Sema.h
  vendor/llvm-project/release-10.x/clang/include/clang/Sema/SemaConcept.h
  vendor/llvm-project/release-10.x/clang/lib/AST/ASTConcept.cpp
  vendor/llvm-project/release-10.x/clang/lib/AST/ASTContext.cpp
  vendor/llvm-project/release-10.x/clang/lib/AST/CXXInheritance.cpp
  vendor/llvm-project/release-10.x/clang/lib/AST/DeclCXX.cpp
  vendor/llvm-project/release-10.x/clang/lib/AST/Expr.cpp
  vendor/llvm-project/release-10.x/clang/lib/AST/ExprConcepts.cpp
  vendor/llvm-project/release-10.x/clang/lib/AST/StmtProfile.cpp
  vendor/llvm-project/release-10.x/clang/lib/Basic/Cuda.cpp
  vendor/llvm-project/release-10.x/clang/lib/CodeGen/CodeGenModule.cpp
  vendor/llvm-project/release-10.x/clang/lib/Driver/Compilation.cpp
  vendor/llvm-project/release-10.x/clang/lib/Driver/Driver.cpp
  vendor/llvm-project/release-10.x/clang/lib/Driver/Job.cpp
  vendor/llvm-project/release-10.x/clang/lib/Driver/ToolChains/Clang.cpp
  vendor/llvm-project/release-10.x/clang/lib/Driver/ToolChains/Cuda.cpp
  vendor/llvm-project/release-10.x/clang/lib/Frontend/CompilerInvocation.cpp
  vendor/llvm-project/release-10.x/clang/lib/Headers/__clang_cuda_intrinsics.h
  vendor/llvm-project/release-10.x/clang/lib/Headers/__clang_cuda_runtime_wrapper.h
  vendor/llvm-project/release-10.x/clang/lib/Headers/xmmintrin.h
  vendor/llvm-project/release-10.x/clang/lib/Lex/Lexer.cpp
  vendor/llvm-project/release-10.x/clang/lib/Lex/Pragma.cpp
  vendor/llvm-project/release-10.x/clang/lib/Parse/ParseDecl.cpp
  vendor/llvm-project/release-10.x/clang/lib/Parse/ParseDeclCXX.cpp
  vendor/llvm-project/release-10.x/clang/lib/Parse/ParseExprCXX.cpp
  vendor/llvm-project/release-10.x/clang/lib/Sema/SemaCast.cpp
  vendor/llvm-project/release-10.x/clang/lib/Sema/SemaConcept.cpp
  vendor/llvm-project/release-10.x/clang/lib/Sema/SemaDecl.cpp
  vendor/llvm-project/release-10.x/clang/lib/Sema/SemaDeclCXX.cpp
  vendor/llvm-project/release-10.x/clang/lib/Sema/SemaExpr.cpp
  vendor/llvm-project/release-10.x/clang/lib/Sema/SemaExprCXX.cpp
  vendor/llvm-project/release-10.x/clang/lib/Sema/SemaOverload.cpp
  vendor/llvm-project/release-10.x/clang/lib/Sema/SemaTemplate.cpp
  vendor/llvm-project/release-10.x/clang/lib/Sema/SemaTemplateDeduction.cpp
  vendor/llvm-project/release-10.x/clang/lib/Sema/SemaTemplateInstantiate.cpp
  vendor/llvm-project/release-10.x/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp
  vendor/llvm-project/release-10.x/clang/lib/Serialization/ASTReaderDecl.cpp
  vendor/llvm-project/release-10.x/clang/lib/StaticAnalyzer/Core/HTMLDiagnostics.cpp
  vendor/llvm-project/release-10.x/clang/tools/driver/cc1_main.cpp
  vendor/llvm-project/release-10.x/clang/tools/driver/cc1as_main.cpp
  vendor/llvm-project/release-10.x/compiler-rt/lib/tsan/rtl/tsan_interceptors_mac.cpp
  vendor/llvm-project/release-10.x/libcxx/include/__config
  vendor/llvm-project/release-10.x/lld/ELF/Arch/ARM.cpp
  vendor/llvm-project/release-10.x/lld/ELF/Arch/PPC.cpp
  vendor/llvm-project/release-10.x/lld/ELF/InputSection.cpp
  vendor/llvm-project/release-10.x/lld/ELF/Relocations.cpp
  vendor/llvm-project/release-10.x/lld/ELF/SyntheticSections.cpp
  vendor/llvm-project/release-10.x/lld/ELF/SyntheticSections.h
  vendor/llvm-project/release-10.x/lld/ELF/Thunks.cpp
  vendor/llvm-project/release-10.x/lld/docs/ReleaseNotes.rst
  vendor/llvm-project/release-10.x/lldb/source/DataFormatters/FormatCache.cpp
  vendor/llvm-project/release-10.x/lldb/source/DataFormatters/LanguageCategory.cpp
  vendor/llvm-project/release-10.x/lldb/source/Interpreter/CommandAlias.cpp
  vendor/llvm-project/release-10.x/lldb/source/Interpreter/Options.cpp
  vendor/llvm-project/release-10.x/lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp
  vendor/llvm-project/release-10.x/lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.h
  vendor/llvm-project/release-10.x/llvm/include/llvm/ADT/StringRef.h
  vendor/llvm-project/release-10.x/llvm/include/llvm/CodeGen/AsmPrinter.h
  vendor/llvm-project/release-10.x/llvm/include/llvm/ExecutionEngine/Orc/CompileUtils.h
  vendor/llvm-project/release-10.x/llvm/include/llvm/ExecutionEngine/Orc/Core.h
  vendor/llvm-project/release-10.x/llvm/include/llvm/ExecutionEngine/Orc/IRCompileLayer.h
  vendor/llvm-project/release-10.x/llvm/include/llvm/ExecutionEngine/Orc/LLJIT.h
  vendor/llvm-project/release-10.x/llvm/include/llvm/ExecutionEngine/Orc/Layer.h
  vendor/llvm-project/release-10.x/llvm/include/llvm/ExecutionEngine/Orc/Speculation.h
  vendor/llvm-project/release-10.x/llvm/include/llvm/Support/CrashRecoveryContext.h
  vendor/llvm-project/release-10.x/llvm/include/llvm/Support/Process.h
  vendor/llvm-project/release-10.x/llvm/include/llvm/Transforms/IPO/PassManagerBuilder.h
  vendor/llvm-project/release-10.x/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
  vendor/llvm-project/release-10.x/llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp
  vendor/llvm-project/release-10.x/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
  vendor/llvm-project/release-10.x/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.h
  vendor/llvm-project/release-10.x/llvm/lib/CodeGen/AsmPrinter/DwarfUnit.cpp
  vendor/llvm-project/release-10.x/llvm/lib/CodeGen/CodeGenPrepare.cpp
  vendor/llvm-project/release-10.x/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp
  vendor/llvm-project/release-10.x/llvm/lib/CodeGen/GlobalISel/MachineIRBuilder.cpp
  vendor/llvm-project/release-10.x/llvm/lib/CodeGen/GlobalMerge.cpp
  vendor/llvm-project/release-10.x/llvm/lib/CodeGen/LiveDebugVariables.cpp
  vendor/llvm-project/release-10.x/llvm/lib/CodeGen/SelectionDAG/FastISel.cpp
  vendor/llvm-project/release-10.x/llvm/lib/CodeGen/SelectionDAG/InstrEmitter.cpp
  vendor/llvm-project/release-10.x/llvm/lib/CodeGen/SelectionDAG/LegalizeVectorTypes.cpp
  vendor/llvm-project/release-10.x/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
  vendor/llvm-project/release-10.x/llvm/lib/CodeGen/StackColoring.cpp
  vendor/llvm-project/release-10.x/llvm/lib/CodeGen/TypePromotion.cpp
  vendor/llvm-project/release-10.x/llvm/lib/ExecutionEngine/Orc/CompileOnDemandLayer.cpp
  vendor/llvm-project/release-10.x/llvm/lib/ExecutionEngine/Orc/CompileUtils.cpp
  vendor/llvm-project/release-10.x/llvm/lib/ExecutionEngine/Orc/Core.cpp
  vendor/llvm-project/release-10.x/llvm/lib/ExecutionEngine/Orc/IRCompileLayer.cpp
  vendor/llvm-project/release-10.x/llvm/lib/ExecutionEngine/Orc/IRTransformLayer.cpp
  vendor/llvm-project/release-10.x/llvm/lib/ExecutionEngine/Orc/LLJIT.cpp
  vendor/llvm-project/release-10.x/llvm/lib/ExecutionEngine/Orc/Layer.cpp
  vendor/llvm-project/release-10.x/llvm/lib/ExecutionEngine/Orc/RTDyldObjectLinkingLayer.cpp
  vendor/llvm-project/release-10.x/llvm/lib/IR/AsmWriter.cpp
  vendor/llvm-project/release-10.x/llvm/lib/Linker/IRMover.cpp
  vendor/llvm-project/release-10.x/llvm/lib/Support/CRC.cpp
  vendor/llvm-project/release-10.x/llvm/lib/Support/CrashRecoveryContext.cpp
  vendor/llvm-project/release-10.x/llvm/lib/Support/ErrorHandling.cpp
  vendor/llvm-project/release-10.x/llvm/lib/Support/Process.cpp
  vendor/llvm-project/release-10.x/llvm/lib/Support/Windows/Signals.inc
  vendor/llvm-project/release-10.x/llvm/lib/Target/AArch64/AArch64AsmPrinter.cpp
  vendor/llvm-project/release-10.x/llvm/lib/Target/AArch64/AArch64LoadStoreOptimizer.cpp
  vendor/llvm-project/release-10.x/llvm/lib/Target/AArch64/AArch64TargetTransformInfo.h
  vendor/llvm-project/release-10.x/llvm/lib/Target/AMDGPU/AMDGPU.h
  vendor/llvm-project/release-10.x/llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp
  vendor/llvm-project/release-10.x/llvm/lib/Target/AMDGPU/AMDGPUUnifyDivergentExitNodes.cpp
  vendor/llvm-project/release-10.x/llvm/lib/Target/AMDGPU/CaymanInstructions.td
  vendor/llvm-project/release-10.x/llvm/lib/Target/AMDGPU/EvergreenInstructions.td
  vendor/llvm-project/release-10.x/llvm/lib/Target/AMDGPU/R600Instructions.td
  vendor/llvm-project/release-10.x/llvm/lib/Target/AMDGPU/SIInsertSkips.cpp
  vendor/llvm-project/release-10.x/llvm/lib/Target/AMDGPU/SILowerControlFlow.cpp
  vendor/llvm-project/release-10.x/llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.cpp
  vendor/llvm-project/release-10.x/llvm/lib/Target/ARM/ARMConstantIslandPass.cpp
  vendor/llvm-project/release-10.x/llvm/lib/Target/ARM/ARMExpandPseudoInsts.cpp
  vendor/llvm-project/release-10.x/llvm/lib/Target/ARM/ARMISelDAGToDAG.cpp
  vendor/llvm-project/release-10.x/llvm/lib/Target/ARM/ARMISelLowering.cpp
  vendor/llvm-project/release-10.x/llvm/lib/Target/ARM/ARMISelLowering.h
  vendor/llvm-project/release-10.x/llvm/lib/Target/ARM/ARMInstrInfo.td
  vendor/llvm-project/release-10.x/llvm/lib/Target/ARM/ARMInstrThumb2.td
  vendor/llvm-project/release-10.x/llvm/lib/Target/ARM/ARMTargetTransformInfo.h
  vendor/llvm-project/release-10.x/llvm/lib/Target/BPF/BPFISelLowering.h
  vendor/llvm-project/release-10.x/llvm/lib/Target/BPF/BPFMISimplifyPatchable.cpp
  vendor/llvm-project/release-10.x/llvm/lib/Target/RISCV/AsmParser/RISCVAsmParser.cpp
  vendor/llvm-project/release-10.x/llvm/lib/Target/RISCV/RISCV.td
  vendor/llvm-project/release-10.x/llvm/lib/Target/RISCV/RISCVInstrFormats.td
  vendor/llvm-project/release-10.x/llvm/lib/Target/RISCV/RISCVInstrInfo.td
  vendor/llvm-project/release-10.x/llvm/lib/Target/RISCV/RISCVInstrInfoA.td
  vendor/llvm-project/release-10.x/llvm/lib/Target/RISCV/RISCVInstrInfoC.td
  vendor/llvm-project/release-10.x/llvm/lib/Target/RISCV/RISCVInstrInfoD.td
  vendor/llvm-project/release-10.x/llvm/lib/Target/RISCV/RISCVInstrInfoF.td
  vendor/llvm-project/release-10.x/llvm/lib/Target/RISCV/RISCVInstrInfoM.td
  vendor/llvm-project/release-10.x/llvm/lib/Target/RISCV/RISCVTargetMachine.cpp
  vendor/llvm-project/release-10.x/llvm/lib/Target/RISCV/Utils/RISCVBaseInfo.cpp
  vendor/llvm-project/release-10.x/llvm/lib/Target/RISCV/Utils/RISCVBaseInfo.h
  vendor/llvm-project/release-10.x/llvm/lib/Target/SystemZ/SystemZISelLowering.cpp
  vendor/llvm-project/release-10.x/llvm/lib/Target/WebAssembly/WebAssemblyLowerEmscriptenEHSjLj.cpp
  vendor/llvm-project/release-10.x/llvm/lib/Target/X86/MCTargetDesc/X86AsmBackend.cpp
  vendor/llvm-project/release-10.x/llvm/lib/Target/X86/X86ISelLowering.cpp
  vendor/llvm-project/release-10.x/llvm/lib/Target/X86/X86MCInstLower.cpp
  vendor/llvm-project/release-10.x/llvm/lib/Transforms/IPO/PassManagerBuilder.cpp
  vendor/llvm-project/release-10.x/llvm/lib/Transforms/InstCombine/InstCombineLoadStoreAlloca.cpp
  vendor/llvm-project/release-10.x/llvm/lib/Transforms/InstCombine/InstCombineSelect.cpp
  vendor/llvm-project/release-10.x/llvm/lib/Transforms/InstCombine/InstructionCombining.cpp
  vendor/llvm-project/release-10.x/llvm/lib/Transforms/Instrumentation/MemorySanitizer.cpp
  vendor/llvm-project/release-10.x/llvm/lib/Transforms/Vectorize/LoopVectorizationPlanner.h
  vendor/llvm-project/release-10.x/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp
  vendor/llvm-project/release-10.x/llvm/tools/lli/lli.cpp

Modified: vendor/llvm-project/release-10.x/clang/include/clang/AST/ASTConcept.h
==============================================================================
--- vendor/llvm-project/release-10.x/clang/include/clang/AST/ASTConcept.h	Fri Feb 14 21:05:15 2020	(r357936)
+++ vendor/llvm-project/release-10.x/clang/include/clang/AST/ASTConcept.h	Fri Feb 14 21:24:03 2020	(r357937)
@@ -29,14 +29,14 @@ class ConceptSpecializationExpr;
 class ConstraintSatisfaction : public llvm::FoldingSetNode {
   // The template-like entity that 'owns' the constraint checked here (can be a
   // constrained entity or a concept).
-  NamedDecl *ConstraintOwner = nullptr;
+  const NamedDecl *ConstraintOwner = nullptr;
   llvm::SmallVector<TemplateArgument, 4> TemplateArgs;
 
 public:
 
   ConstraintSatisfaction() = default;
 
-  ConstraintSatisfaction(NamedDecl *ConstraintOwner,
+  ConstraintSatisfaction(const NamedDecl *ConstraintOwner,
                          ArrayRef<TemplateArgument> TemplateArgs) :
       ConstraintOwner(ConstraintOwner), TemplateArgs(TemplateArgs.begin(),
                                                      TemplateArgs.end()) { }
@@ -57,7 +57,7 @@ class ConstraintSatisfaction : public llvm::FoldingSet
   }
 
   static void Profile(llvm::FoldingSetNodeID &ID, const ASTContext &C,
-                      NamedDecl *ConstraintOwner,
+                      const NamedDecl *ConstraintOwner,
                       ArrayRef<TemplateArgument> TemplateArgs);
 };
 

Modified: vendor/llvm-project/release-10.x/clang/include/clang/AST/ExprConcepts.h
==============================================================================
--- vendor/llvm-project/release-10.x/clang/include/clang/AST/ExprConcepts.h	Fri Feb 14 21:05:15 2020	(r357936)
+++ vendor/llvm-project/release-10.x/clang/include/clang/AST/ExprConcepts.h	Fri Feb 14 21:24:03 2020	(r357937)
@@ -63,6 +63,12 @@ class ConceptSpecializationExpr final : public Expr, p
                             ArrayRef<TemplateArgument> ConvertedArgs,
                             const ConstraintSatisfaction *Satisfaction);
 
+  ConceptSpecializationExpr(const ASTContext &C, ConceptDecl *NamedConcept,
+                            ArrayRef<TemplateArgument> ConvertedArgs,
+                            const ConstraintSatisfaction *Satisfaction,
+                            bool Dependent,
+                            bool ContainsUnexpandedParameterPack);
+
   ConceptSpecializationExpr(EmptyShell Empty, unsigned NumTemplateArgs);
 
 public:
@@ -74,6 +80,13 @@ class ConceptSpecializationExpr final : public Expr, p
          const ASTTemplateArgumentListInfo *ArgsAsWritten,
          ArrayRef<TemplateArgument> ConvertedArgs,
          const ConstraintSatisfaction *Satisfaction);
+
+  static ConceptSpecializationExpr *
+  Create(const ASTContext &C, ConceptDecl *NamedConcept,
+         ArrayRef<TemplateArgument> ConvertedArgs,
+         const ConstraintSatisfaction *Satisfaction,
+         bool Dependent,
+         bool ContainsUnexpandedParameterPack);
 
   static ConceptSpecializationExpr *
   Create(ASTContext &C, EmptyShell Empty, unsigned NumTemplateArgs);

Modified: vendor/llvm-project/release-10.x/clang/include/clang/Basic/Cuda.h
==============================================================================
--- vendor/llvm-project/release-10.x/clang/include/clang/Basic/Cuda.h	Fri Feb 14 21:05:15 2020	(r357936)
+++ vendor/llvm-project/release-10.x/clang/include/clang/Basic/Cuda.h	Fri Feb 14 21:24:03 2020	(r357937)
@@ -11,6 +11,7 @@
 
 namespace llvm {
 class StringRef;
+class Twine;
 class VersionTuple;
 } // namespace llvm
 
@@ -30,7 +31,7 @@ enum class CudaVersion {
 };
 const char *CudaVersionToString(CudaVersion V);
 // Input is "Major.Minor"
-CudaVersion CudaStringToVersion(llvm::StringRef S);
+CudaVersion CudaStringToVersion(const llvm::Twine &S);
 
 enum class CudaArch {
   UNKNOWN,

Modified: vendor/llvm-project/release-10.x/clang/include/clang/Basic/DiagnosticDriverKinds.td
==============================================================================
--- vendor/llvm-project/release-10.x/clang/include/clang/Basic/DiagnosticDriverKinds.td	Fri Feb 14 21:05:15 2020	(r357936)
+++ vendor/llvm-project/release-10.x/clang/include/clang/Basic/DiagnosticDriverKinds.td	Fri Feb 14 21:24:03 2020	(r357937)
@@ -60,6 +60,9 @@ def err_drv_cuda_version_unsupported : Error<
   "but installation at %3 is %4.  Use --cuda-path to specify a different CUDA "
   "install, pass a different GPU arch with --cuda-gpu-arch, or pass "
   "--no-cuda-version-check.">;
+def warn_drv_unknown_cuda_version: Warning<
+  "Unknown CUDA version %0. Assuming the latest supported version %1">,
+  InGroup<CudaUnknownVersion>;
 def err_drv_cuda_host_arch : Error<"unsupported architecture '%0' for host compilation.">;
 def err_drv_mix_cuda_hip : Error<"Mixed Cuda and HIP compilation is not supported.">;
 def err_drv_invalid_thread_model_for_target : Error<

Modified: vendor/llvm-project/release-10.x/clang/include/clang/Basic/DiagnosticGroups.td
==============================================================================
--- vendor/llvm-project/release-10.x/clang/include/clang/Basic/DiagnosticGroups.td	Fri Feb 14 21:05:15 2020	(r357936)
+++ vendor/llvm-project/release-10.x/clang/include/clang/Basic/DiagnosticGroups.td	Fri Feb 14 21:24:03 2020	(r357937)
@@ -384,7 +384,10 @@ def GNULabelsAsValue : DiagGroup<"gnu-label-as-value">
 def LiteralRange : DiagGroup<"literal-range">;
 def LocalTypeTemplateArgs : DiagGroup<"local-type-template-args",
                                       [CXX98CompatLocalTypeTemplateArgs]>;
-def RangeLoopAnalysis : DiagGroup<"range-loop-analysis">;
+def RangeLoopConstruct : DiagGroup<"range-loop-construct">;
+def RangeLoopBindReference : DiagGroup<"range-loop-bind-reference">;
+def RangeLoopAnalysis : DiagGroup<"range-loop-analysis",
+                                  [RangeLoopConstruct, RangeLoopBindReference]>;
 def ForLoopAnalysis : DiagGroup<"for-loop-analysis">;
 def LoopAnalysis : DiagGroup<"loop-analysis", [ForLoopAnalysis,
                                                RangeLoopAnalysis]>;
@@ -858,14 +861,15 @@ def Most : DiagGroup<"most", [
     Comment,
     DeleteNonVirtualDtor,
     Format,
+    ForLoopAnalysis,
     Implicit,
     InfiniteRecursion,
     IntInBoolContext,
-    LoopAnalysis,
     MismatchedTags,
     MissingBraces,
     Move,
     MultiChar,
+    RangeLoopConstruct,
     Reorder,
     ReturnType,
     SelfAssignment,
@@ -1112,6 +1116,9 @@ def SerializedDiagnostics : DiagGroup<"serialized-diag
 // A warning group for warnings about code that clang accepts when
 // compiling CUDA C/C++ but which is not compatible with the CUDA spec.
 def CudaCompat : DiagGroup<"cuda-compat">;
+
+// Warning about unknown CUDA SDK version.
+def CudaUnknownVersion: DiagGroup<"unknown-cuda-version">;
 
 // A warning group for warnings about features supported by HIP but
 // ignored by CUDA.

Modified: vendor/llvm-project/release-10.x/clang/include/clang/Basic/DiagnosticSemaKinds.td
==============================================================================
--- vendor/llvm-project/release-10.x/clang/include/clang/Basic/DiagnosticSemaKinds.td	Fri Feb 14 21:05:15 2020	(r357936)
+++ vendor/llvm-project/release-10.x/clang/include/clang/Basic/DiagnosticSemaKinds.td	Fri Feb 14 21:24:03 2020	(r357937)
@@ -2378,17 +2378,17 @@ def warn_for_range_const_reference_copy : Warning<
   "loop variable %0 "
   "%diff{has type $ but is initialized with type $"
   "| is initialized with a value of a different type}1,2 resulting in a copy">,
-  InGroup<RangeLoopAnalysis>, DefaultIgnore;
+  InGroup<RangeLoopConstruct>, DefaultIgnore;
 def note_use_type_or_non_reference : Note<
   "use non-reference type %0 to keep the copy or type %1 to prevent copying">;
 def warn_for_range_variable_always_copy : Warning<
   "loop variable %0 is always a copy because the range of type %1 does not "
   "return a reference">,
-  InGroup<RangeLoopAnalysis>, DefaultIgnore;
+  InGroup<RangeLoopBindReference>, DefaultIgnore;
 def note_use_non_reference_type : Note<"use non-reference type %0">;
 def warn_for_range_copy : Warning<
   "loop variable %0 of type %1 creates a copy from type %2">,
-  InGroup<RangeLoopAnalysis>, DefaultIgnore;
+  InGroup<RangeLoopConstruct>, DefaultIgnore;
 def note_use_reference_type : Note<"use reference type %0 to prevent copying">;
 def err_objc_for_range_init_stmt : Error<
   "initialization statement is not supported when iterating over Objective-C "
@@ -4683,6 +4683,8 @@ def note_checking_constraints_for_var_spec_id_here : N
 def note_checking_constraints_for_class_spec_id_here : Note<
   "while checking constraint satisfaction for class template partial "
   "specialization '%0' required here">;
+def note_checking_constraints_for_function_here : Note<
+  "while checking constraint satisfaction for function '%0' required here">;
 def note_constraint_substitution_here : Note<
   "while substituting template arguments into constraint expression here">;
 def note_constraint_normalization_here : Note<
@@ -6746,6 +6748,10 @@ def err_bad_cxx_cast_scalar_to_vector_different_size :
 def err_bad_cxx_cast_vector_to_vector_different_size : Error<
   "%select{||reinterpret_cast||C-style cast|}0 from vector %1 "
   "to vector %2 of different size">;
+def warn_bad_cxx_cast_nested_pointer_addr_space : Warning<
+  "%select{reinterpret_cast|C-style cast}0 from %1 to %2 "
+  "changes address space of nested pointers">,
+  InGroup<IncompatiblePointerTypesDiscardsQualifiers>;
 def err_bad_lvalue_to_rvalue_cast : Error<
   "cannot cast from lvalue of type %1 to rvalue reference type %2; types are "
   "not compatible">;
@@ -8390,6 +8396,12 @@ def note_defaulted_comparison_cannot_deduce : Note<
   "return type of defaulted 'operator<=>' cannot be deduced because "
   "return type %2 of three-way comparison for %select{|member|base class}0 %1 "
   "is not a standard comparison category type">;
+def err_defaulted_comparison_cannot_deduce_undeduced_auto : Error<
+  "return type of defaulted 'operator<=>' cannot be deduced because "
+  "three-way comparison for %select{|member|base class}0 %1 "
+  "has a deduced return type and is not yet defined">;
+def note_defaulted_comparison_cannot_deduce_undeduced_auto : Note<
+  "%select{|member|base class}0 %1 declared here">;
 def note_defaulted_comparison_cannot_deduce_callee : Note<
   "selected 'operator<=>' for %select{|member|base class}0 %1 declared here">;
 def err_incorrect_defaulted_comparison_constexpr : Error<

Modified: vendor/llvm-project/release-10.x/clang/include/clang/Driver/CC1Options.td
==============================================================================
--- vendor/llvm-project/release-10.x/clang/include/clang/Driver/CC1Options.td	Fri Feb 14 21:05:15 2020	(r357936)
+++ vendor/llvm-project/release-10.x/clang/include/clang/Driver/CC1Options.td	Fri Feb 14 21:24:03 2020	(r357937)
@@ -859,6 +859,8 @@ def detailed_preprocessing_record : Flag<["-"], "detai
   HelpText<"include a detailed record of preprocessing actions">;
 def setup_static_analyzer : Flag<["-"], "setup-static-analyzer">,
   HelpText<"Set up preprocessor for static analyzer (done automatically when static analyzer is run).">;
+def disable_pragma_debug_crash : Flag<["-"], "disable-pragma-debug-crash">,
+  HelpText<"Disable any #pragma clang __debug that can lead to crashing behavior. This is meant for testing.">;
 
 //===----------------------------------------------------------------------===//
 // OpenCL Options

Modified: vendor/llvm-project/release-10.x/clang/include/clang/Driver/Job.h
==============================================================================
--- vendor/llvm-project/release-10.x/clang/include/clang/Driver/Job.h	Fri Feb 14 21:05:15 2020	(r357936)
+++ vendor/llvm-project/release-10.x/clang/include/clang/Driver/Job.h	Fri Feb 14 21:24:03 2020	(r357937)
@@ -55,9 +55,6 @@ class Command {
   /// The list of program arguments which are inputs.
   llvm::opt::ArgStringList InputFilenames;
 
-  /// Whether to print the input filenames when executing.
-  bool PrintInputFilenames = false;
-
   /// Response file name, if this command is set to use one, or nullptr
   /// otherwise
   const char *ResponseFile = nullptr;
@@ -86,6 +83,12 @@ class Command {
   void writeResponseFile(raw_ostream &OS) const;
 
 public:
+  /// Whether to print the input filenames when executing.
+  bool PrintInputFilenames = false;
+
+  /// Whether the command will be executed in this process or not.
+  bool InProcess = false;
+
   Command(const Action &Source, const Tool &Creator, const char *Executable,
           const llvm::opt::ArgStringList &Arguments,
           ArrayRef<InputInfo> Inputs);
@@ -128,9 +131,6 @@ class Command {
   /// Print a command argument, and optionally quote it.
   static void printArg(llvm::raw_ostream &OS, StringRef Arg, bool Quote);
 
-  /// Set whether to print the input filenames when executing.
-  void setPrintInputFilenames(bool P) { PrintInputFilenames = P; }
-
 protected:
   /// Optionally print the filenames to be compiled
   void PrintFileNames() const;
@@ -139,7 +139,9 @@ class Command {
 /// Use the CC1 tool callback when available, to avoid creating a new process
 class CC1Command : public Command {
 public:
-  using Command::Command;
+  CC1Command(const Action &Source, const Tool &Creator, const char *Executable,
+             const llvm::opt::ArgStringList &Arguments,
+             ArrayRef<InputInfo> Inputs);
 
   void Print(llvm::raw_ostream &OS, const char *Terminator, bool Quote,
              CrashReportInfo *CrashInfo = nullptr) const override;

Modified: vendor/llvm-project/release-10.x/clang/include/clang/Lex/PreprocessorOptions.h
==============================================================================
--- vendor/llvm-project/release-10.x/clang/include/clang/Lex/PreprocessorOptions.h	Fri Feb 14 21:05:15 2020	(r357936)
+++ vendor/llvm-project/release-10.x/clang/include/clang/Lex/PreprocessorOptions.h	Fri Feb 14 21:24:03 2020	(r357937)
@@ -189,6 +189,9 @@ class PreprocessorOptions { (public)
   /// Set up preprocessor for RunAnalysis action.
   bool SetUpStaticAnalyzer = false;
 
+  /// Prevents intended crashes when using #pragma clang __debug. For testing.
+  bool DisablePragmaDebugCrash = false;
+
 public:
   PreprocessorOptions() : PrecompiledPreambleBytes(0, false) {}
 

Modified: vendor/llvm-project/release-10.x/clang/include/clang/Sema/Sema.h
==============================================================================
--- vendor/llvm-project/release-10.x/clang/include/clang/Sema/Sema.h	Fri Feb 14 21:05:15 2020	(r357936)
+++ vendor/llvm-project/release-10.x/clang/include/clang/Sema/Sema.h	Fri Feb 14 21:24:03 2020	(r357937)
@@ -6275,7 +6275,7 @@ class Sema final { (public)
   /// \returns true if an error occurred and satisfaction could not be checked,
   /// false otherwise.
   bool CheckConstraintSatisfaction(
-      NamedDecl *Template, ArrayRef<const Expr *> ConstraintExprs,
+      const NamedDecl *Template, ArrayRef<const Expr *> ConstraintExprs,
       ArrayRef<TemplateArgument> TemplateArgs,
       SourceRange TemplateIDRange, ConstraintSatisfaction &Satisfaction);
 
@@ -6288,6 +6288,17 @@ class Sema final { (public)
   bool CheckConstraintSatisfaction(const Expr *ConstraintExpr,
                                    ConstraintSatisfaction &Satisfaction);
 
+  /// Check whether the given function decl's trailing requires clause is
+  /// satisfied, if any. Returns false and updates Satisfaction with the
+  /// satisfaction verdict if successful, emits a diagnostic and returns true if
+  /// an error occured and satisfaction could not be determined.
+  ///
+  /// \returns true if an error occurred, false otherwise.
+  bool CheckFunctionConstraints(const FunctionDecl *FD,
+                                ConstraintSatisfaction &Satisfaction,
+                                SourceLocation UsageLoc = SourceLocation());
+
+
   /// \brief Ensure that the given template arguments satisfy the constraints
   /// associated with the given template, emitting a diagnostic if they do not.
   ///
@@ -6986,7 +6997,7 @@ class Sema final { (public)
   /// Get a template argument mapping the given template parameter to itself,
   /// e.g. for X in \c template<int X>, this would return an expression template
   /// argument referencing X.
-  TemplateArgumentLoc getIdentityTemplateArgumentLoc(Decl *Param,
+  TemplateArgumentLoc getIdentityTemplateArgumentLoc(NamedDecl *Param,
                                                      SourceLocation Location);
 
   void translateTemplateArguments(const ASTTemplateArgsPtr &In,

Modified: vendor/llvm-project/release-10.x/clang/include/clang/Sema/SemaConcept.h
==============================================================================
--- vendor/llvm-project/release-10.x/clang/include/clang/Sema/SemaConcept.h	Fri Feb 14 21:05:15 2020	(r357936)
+++ vendor/llvm-project/release-10.x/clang/include/clang/Sema/SemaConcept.h	Fri Feb 14 21:24:03 2020	(r357937)
@@ -43,11 +43,15 @@ struct AtomicConstraint {
     if (ParameterMapping->size() != Other.ParameterMapping->size())
       return false;
 
-    for (unsigned I = 0, S = ParameterMapping->size(); I < S; ++I)
-      if (!C.getCanonicalTemplateArgument((*ParameterMapping)[I].getArgument())
-               .structurallyEquals(C.getCanonicalTemplateArgument(
-                  (*Other.ParameterMapping)[I].getArgument())))
+    for (unsigned I = 0, S = ParameterMapping->size(); I < S; ++I) {
+      llvm::FoldingSetNodeID IDA, IDB;
+      C.getCanonicalTemplateArgument((*ParameterMapping)[I].getArgument())
+          .Profile(IDA, C);
+      C.getCanonicalTemplateArgument((*Other.ParameterMapping)[I].getArgument())
+          .Profile(IDB, C);
+      if (IDA != IDB)
         return false;
+    }
     return true;
   }
 

Modified: vendor/llvm-project/release-10.x/clang/lib/AST/ASTConcept.cpp
==============================================================================
--- vendor/llvm-project/release-10.x/clang/lib/AST/ASTConcept.cpp	Fri Feb 14 21:05:15 2020	(r357936)
+++ vendor/llvm-project/release-10.x/clang/lib/AST/ASTConcept.cpp	Fri Feb 14 21:24:03 2020	(r357937)
@@ -59,8 +59,8 @@ ASTConstraintSatisfaction::Create(const ASTContext &C,
 }
 
 void ConstraintSatisfaction::Profile(
-    llvm::FoldingSetNodeID &ID, const ASTContext &C, NamedDecl *ConstraintOwner,
-    ArrayRef<TemplateArgument> TemplateArgs) {
+    llvm::FoldingSetNodeID &ID, const ASTContext &C,
+    const NamedDecl *ConstraintOwner, ArrayRef<TemplateArgument> TemplateArgs) {
   ID.AddPointer(ConstraintOwner);
   ID.AddInteger(TemplateArgs.size());
   for (auto &Arg : TemplateArgs)

Modified: vendor/llvm-project/release-10.x/clang/lib/AST/ASTContext.cpp
==============================================================================
--- vendor/llvm-project/release-10.x/clang/lib/AST/ASTContext.cpp	Fri Feb 14 21:05:15 2020	(r357936)
+++ vendor/llvm-project/release-10.x/clang/lib/AST/ASTContext.cpp	Fri Feb 14 21:24:03 2020	(r357937)
@@ -756,12 +756,8 @@ canonicalizeImmediatelyDeclaredConstraint(const ASTCon
       NewConverted.push_back(Arg);
   }
   Expr *NewIDC = ConceptSpecializationExpr::Create(
-      C, NestedNameSpecifierLoc(), /*TemplateKWLoc=*/SourceLocation(),
-      CSE->getConceptNameInfo(), /*FoundDecl=*/CSE->getNamedConcept(),
-      CSE->getNamedConcept(),
-      // Actually canonicalizing a TemplateArgumentLoc is difficult so we
-      // simply omit the ArgsAsWritten
-      /*ArgsAsWritten=*/nullptr, NewConverted, nullptr);
+      C, CSE->getNamedConcept(), NewConverted, nullptr,
+      CSE->isInstantiationDependent(), CSE->containsUnexpandedParameterPack());
 
   if (auto *OrigFold = dyn_cast<CXXFoldExpr>(IDC))
     NewIDC = new (C) CXXFoldExpr(OrigFold->getType(), SourceLocation(), NewIDC,

Modified: vendor/llvm-project/release-10.x/clang/lib/AST/CXXInheritance.cpp
==============================================================================
--- vendor/llvm-project/release-10.x/clang/lib/AST/CXXInheritance.cpp	Fri Feb 14 21:05:15 2020	(r357936)
+++ vendor/llvm-project/release-10.x/clang/lib/AST/CXXInheritance.cpp	Fri Feb 14 21:24:03 2020	(r357937)
@@ -758,6 +758,8 @@ CXXRecordDecl::getFinalOverriders(CXXFinalOverriderMap
         return false;
       };
 
+      // FIXME: IsHidden reads from Overriding from the middle of a remove_if
+      // over the same sequence! Is this guaranteed to work?
       Overriding.erase(
           std::remove_if(Overriding.begin(), Overriding.end(), IsHidden),
           Overriding.end());

Modified: vendor/llvm-project/release-10.x/clang/lib/AST/DeclCXX.cpp
==============================================================================
--- vendor/llvm-project/release-10.x/clang/lib/AST/DeclCXX.cpp	Fri Feb 14 21:05:15 2020	(r357936)
+++ vendor/llvm-project/release-10.x/clang/lib/AST/DeclCXX.cpp	Fri Feb 14 21:24:03 2020	(r357937)
@@ -2038,17 +2038,36 @@ CXXMethodDecl::getCorrespondingMethodInClass(const CXX
   if (auto *MD = getCorrespondingMethodDeclaredInClass(RD, MayBeBase))
     return MD;
 
+  llvm::SmallVector<CXXMethodDecl*, 4> FinalOverriders;
+  auto AddFinalOverrider = [&](CXXMethodDecl *D) {
+    // If this function is overridden by a candidate final overrider, it is not
+    // a final overrider.
+    for (CXXMethodDecl *OtherD : FinalOverriders) {
+      if (declaresSameEntity(D, OtherD) || recursivelyOverrides(OtherD, D))
+        return;
+    }
+
+    // Other candidate final overriders might be overridden by this function.
+    FinalOverriders.erase(
+        std::remove_if(FinalOverriders.begin(), FinalOverriders.end(),
+                       [&](CXXMethodDecl *OtherD) {
+                         return recursivelyOverrides(D, OtherD);
+                       }),
+        FinalOverriders.end());
+
+    FinalOverriders.push_back(D);
+  };
+
   for (const auto &I : RD->bases()) {
     const RecordType *RT = I.getType()->getAs<RecordType>();
     if (!RT)
       continue;
     const auto *Base = cast<CXXRecordDecl>(RT->getDecl());
-    CXXMethodDecl *T = this->getCorrespondingMethodInClass(Base);
-    if (T)
-      return T;
+    if (CXXMethodDecl *D = this->getCorrespondingMethodInClass(Base))
+      AddFinalOverrider(D);
   }
 
-  return nullptr;
+  return FinalOverriders.size() == 1 ? FinalOverriders.front() : nullptr;
 }
 
 CXXMethodDecl *CXXMethodDecl::Create(ASTContext &C, CXXRecordDecl *RD,
@@ -2104,6 +2123,11 @@ CXXMethodDecl *CXXMethodDecl::getDevirtualizedMethod(c
   // There may be a method corresponding to MD in a derived class.
   CXXMethodDecl *DevirtualizedMethod =
       getCorrespondingMethodInClass(BestDynamicDecl);
+
+  // If there final overrider in the dynamic type is ambiguous, we can't
+  // devirtualize this call.
+  if (!DevirtualizedMethod)
+    return nullptr;
 
   // If that method is pure virtual, we can't devirtualize. If this code is
   // reached, the result would be UB, not a direct call to the derived class

Modified: vendor/llvm-project/release-10.x/clang/lib/AST/Expr.cpp
==============================================================================
--- vendor/llvm-project/release-10.x/clang/lib/AST/Expr.cpp	Fri Feb 14 21:05:15 2020	(r357936)
+++ vendor/llvm-project/release-10.x/clang/lib/AST/Expr.cpp	Fri Feb 14 21:24:03 2020	(r357937)
@@ -1685,6 +1685,11 @@ MemberExpr *MemberExpr::Create(
     CXXRecordDecl *RD = dyn_cast_or_null<CXXRecordDecl>(DC);
     if (RD && RD->isDependentContext() && RD->isCurrentInstantiation(DC))
       E->setTypeDependent(T->isDependentType());
+
+    // Bitfield with value-dependent width is type-dependent.
+    FieldDecl *FD = dyn_cast<FieldDecl>(MemberDecl);
+    if (FD && FD->isBitField() && FD->getBitWidth()->isValueDependent())
+      E->setTypeDependent(true);
   }
 
   if (HasQualOrFound) {

Modified: vendor/llvm-project/release-10.x/clang/lib/AST/ExprConcepts.cpp
==============================================================================
--- vendor/llvm-project/release-10.x/clang/lib/AST/ExprConcepts.cpp	Fri Feb 14 21:05:15 2020	(r357936)
+++ vendor/llvm-project/release-10.x/clang/lib/AST/ExprConcepts.cpp	Fri Feb 14 21:24:03 2020	(r357937)
@@ -46,24 +46,12 @@ ConceptSpecializationExpr::ConceptSpecializationExpr(c
                    ASTConstraintSatisfaction::Create(C, *Satisfaction) :
                    nullptr) {
   setTemplateArguments(ConvertedArgs);
-}
-
-ConceptSpecializationExpr::ConceptSpecializationExpr(EmptyShell Empty,
-    unsigned NumTemplateArgs)
-    : Expr(ConceptSpecializationExprClass, Empty), ConceptReference(),
-      NumTemplateArgs(NumTemplateArgs) { }
-
-void ConceptSpecializationExpr::setTemplateArguments(
-    ArrayRef<TemplateArgument> Converted) {
-  assert(Converted.size() == NumTemplateArgs);
-  std::uninitialized_copy(Converted.begin(), Converted.end(),
-                          getTrailingObjects<TemplateArgument>());
   bool IsInstantiationDependent = false;
   bool ContainsUnexpandedParameterPack = false;
-  for (const TemplateArgument& Arg : Converted) {
-    if (Arg.isInstantiationDependent())
+  for (const TemplateArgumentLoc& ArgLoc : ArgsAsWritten->arguments()) {
+    if (ArgLoc.getArgument().isInstantiationDependent())
       IsInstantiationDependent = true;
-    if (Arg.containsUnexpandedParameterPack())
+    if (ArgLoc.getArgument().containsUnexpandedParameterPack())
       ContainsUnexpandedParameterPack = true;
     if (ContainsUnexpandedParameterPack && IsInstantiationDependent)
       break;
@@ -80,6 +68,18 @@ void ConceptSpecializationExpr::setTemplateArguments(
          "should not be value-dependent");
 }
 
+ConceptSpecializationExpr::ConceptSpecializationExpr(EmptyShell Empty,
+    unsigned NumTemplateArgs)
+    : Expr(ConceptSpecializationExprClass, Empty), ConceptReference(),
+      NumTemplateArgs(NumTemplateArgs) { }
+
+void ConceptSpecializationExpr::setTemplateArguments(
+    ArrayRef<TemplateArgument> Converted) {
+  assert(Converted.size() == NumTemplateArgs);
+  std::uninitialized_copy(Converted.begin(), Converted.end(),
+                          getTrailingObjects<TemplateArgument>());
+}
+
 ConceptSpecializationExpr *
 ConceptSpecializationExpr::Create(const ASTContext &C,
                                   NestedNameSpecifierLoc NNS,
@@ -96,6 +96,39 @@ ConceptSpecializationExpr::Create(const ASTContext &C,
                                                 ConceptNameInfo, FoundDecl,
                                                 NamedConcept, ArgsAsWritten,
                                                 ConvertedArgs, Satisfaction);
+}
+
+ConceptSpecializationExpr::ConceptSpecializationExpr(
+    const ASTContext &C, ConceptDecl *NamedConcept,
+    ArrayRef<TemplateArgument> ConvertedArgs,
+    const ConstraintSatisfaction *Satisfaction, bool Dependent,
+    bool ContainsUnexpandedParameterPack)
+    : Expr(ConceptSpecializationExprClass, C.BoolTy, VK_RValue, OK_Ordinary,
+           /*TypeDependent=*/false,
+           /*ValueDependent=*/!Satisfaction, Dependent,
+           ContainsUnexpandedParameterPack),
+      ConceptReference(NestedNameSpecifierLoc(), SourceLocation(),
+                       DeclarationNameInfo(), NamedConcept,
+                       NamedConcept, nullptr),
+      NumTemplateArgs(ConvertedArgs.size()),
+      Satisfaction(Satisfaction ?
+                   ASTConstraintSatisfaction::Create(C, *Satisfaction) :
+                   nullptr) {
+  setTemplateArguments(ConvertedArgs);
+}
+
+ConceptSpecializationExpr *
+ConceptSpecializationExpr::Create(const ASTContext &C,
+                                  ConceptDecl *NamedConcept,
+                                  ArrayRef<TemplateArgument> ConvertedArgs,
+                                  const ConstraintSatisfaction *Satisfaction,
+                                  bool Dependent,
+                                  bool ContainsUnexpandedParameterPack) {
+  void *Buffer = C.Allocate(totalSizeToAlloc<TemplateArgument>(
+                                ConvertedArgs.size()));
+  return new (Buffer) ConceptSpecializationExpr(
+      C, NamedConcept, ConvertedArgs, Satisfaction, Dependent,
+      ContainsUnexpandedParameterPack);
 }
 
 ConceptSpecializationExpr *

Modified: vendor/llvm-project/release-10.x/clang/lib/AST/StmtProfile.cpp
==============================================================================
--- vendor/llvm-project/release-10.x/clang/lib/AST/StmtProfile.cpp	Fri Feb 14 21:05:15 2020	(r357936)
+++ vendor/llvm-project/release-10.x/clang/lib/AST/StmtProfile.cpp	Fri Feb 14 21:24:03 2020	(r357937)
@@ -1535,8 +1535,8 @@ static Stmt::StmtClass DecodeOperatorCall(const CXXOpe
     return Stmt::BinaryOperatorClass;
 
   case OO_Spaceship:
-    // FIXME: Update this once we support <=> expressions.
-    llvm_unreachable("<=> expressions not supported yet");
+    BinaryOp = BO_Cmp;
+    return Stmt::BinaryOperatorClass;
 
   case OO_AmpAmp:
     BinaryOp = BO_LAnd;

Modified: vendor/llvm-project/release-10.x/clang/lib/Basic/Cuda.cpp
==============================================================================
--- vendor/llvm-project/release-10.x/clang/lib/Basic/Cuda.cpp	Fri Feb 14 21:05:15 2020	(r357936)
+++ vendor/llvm-project/release-10.x/clang/lib/Basic/Cuda.cpp	Fri Feb 14 21:24:03 2020	(r357937)
@@ -2,6 +2,7 @@
 
 #include "llvm/ADT/StringRef.h"
 #include "llvm/ADT/StringSwitch.h"
+#include "llvm/ADT/Twine.h"
 #include "llvm/Support/ErrorHandling.h"
 #include "llvm/Support/VersionTuple.h"
 
@@ -31,8 +32,8 @@ const char *CudaVersionToString(CudaVersion V) {
   llvm_unreachable("invalid enum");
 }
 
-CudaVersion CudaStringToVersion(llvm::StringRef S) {
-  return llvm::StringSwitch<CudaVersion>(S)
+CudaVersion CudaStringToVersion(const llvm::Twine &S) {
+  return llvm::StringSwitch<CudaVersion>(S.str())
       .Case("7.0", CudaVersion::CUDA_70)
       .Case("7.5", CudaVersion::CUDA_75)
       .Case("8.0", CudaVersion::CUDA_80)
@@ -40,7 +41,8 @@ CudaVersion CudaStringToVersion(llvm::StringRef S) {
       .Case("9.1", CudaVersion::CUDA_91)
       .Case("9.2", CudaVersion::CUDA_92)
       .Case("10.0", CudaVersion::CUDA_100)
-      .Case("10.1", CudaVersion::CUDA_101);
+      .Case("10.1", CudaVersion::CUDA_101)
+      .Default(CudaVersion::UNKNOWN);
 }
 
 const char *CudaArchToString(CudaArch A) {

Modified: vendor/llvm-project/release-10.x/clang/lib/CodeGen/CodeGenModule.cpp
==============================================================================
--- vendor/llvm-project/release-10.x/clang/lib/CodeGen/CodeGenModule.cpp	Fri Feb 14 21:05:15 2020	(r357936)
+++ vendor/llvm-project/release-10.x/clang/lib/CodeGen/CodeGenModule.cpp	Fri Feb 14 21:24:03 2020	(r357937)
@@ -537,6 +537,13 @@ void CodeGenModule::Release() {
     getModule().addModuleFlag(llvm::Module::Error, "min_enum_size", EnumWidth);
   }
 
+  if (Arch == llvm::Triple::riscv32 || Arch == llvm::Triple::riscv64) {
+    StringRef ABIStr = Target.getABI();
+    llvm::LLVMContext &Ctx = TheModule.getContext();
+    getModule().addModuleFlag(llvm::Module::Error, "target-abi",
+                              llvm::MDString::get(Ctx, ABIStr));
+  }
+
   if (CodeGenOpts.SanitizeCfiCrossDso) {
     // Indicate that we want cross-DSO control flow integrity checks.
     getModule().addModuleFlag(llvm::Module::Override, "Cross-DSO CFI", 1);

Modified: vendor/llvm-project/release-10.x/clang/lib/Driver/Compilation.cpp
==============================================================================
--- vendor/llvm-project/release-10.x/clang/lib/Driver/Compilation.cpp	Fri Feb 14 21:05:15 2020	(r357936)
+++ vendor/llvm-project/release-10.x/clang/lib/Driver/Compilation.cpp	Fri Feb 14 21:24:03 2020	(r357937)
@@ -258,13 +258,22 @@ void Compilation::initCompilationForDiagnostics() {
 
   // Remove any user specified output.  Claim any unclaimed arguments, so as
   // to avoid emitting warnings about unused args.
-  OptSpecifier OutputOpts[] = { options::OPT_o, options::OPT_MD,
-                                options::OPT_MMD };
+  OptSpecifier OutputOpts[] = {
+      options::OPT_o,  options::OPT_MD, options::OPT_MMD, options::OPT_M,
+      options::OPT_MM, options::OPT_MF, options::OPT_MG,  options::OPT_MJ,
+      options::OPT_MQ, options::OPT_MT, options::OPT_MV};
   for (unsigned i = 0, e = llvm::array_lengthof(OutputOpts); i != e; ++i) {
     if (TranslatedArgs->hasArg(OutputOpts[i]))
       TranslatedArgs->eraseArg(OutputOpts[i]);
   }
   TranslatedArgs->ClaimAllArgs();
+
+  // Force re-creation of the toolchain Args, otherwise our modifications just
+  // above will have no effect.
+  for (auto Arg : TCArgs)
+    if (Arg.second != TranslatedArgs)
+      delete Arg.second;
+  TCArgs.clear();
 
   // Redirect stdout/stderr to /dev/null.
   Redirects = {None, {""}, {""}};

Modified: vendor/llvm-project/release-10.x/clang/lib/Driver/Driver.cpp
==============================================================================
--- vendor/llvm-project/release-10.x/clang/lib/Driver/Driver.cpp	Fri Feb 14 21:05:15 2020	(r357936)
+++ vendor/llvm-project/release-10.x/clang/lib/Driver/Driver.cpp	Fri Feb 14 21:24:03 2020	(r357937)
@@ -3757,6 +3757,11 @@ void Driver::BuildJobs(Compilation &C) const {
                        /*TargetDeviceOffloadKind*/ Action::OFK_None);
   }
 
+  // If we have more than one job, then disable integrated-cc1 for now.
+  if (C.getJobs().size() > 1)
+    for (auto &J : C.getJobs())
+      J.InProcess = false;
+
   // If the user passed -Qunused-arguments or there were errors, don't warn
   // about any unused arguments.
   if (Diags.hasErrorOccurred() ||

Modified: vendor/llvm-project/release-10.x/clang/lib/Driver/Job.cpp
==============================================================================
--- vendor/llvm-project/release-10.x/clang/lib/Driver/Job.cpp	Fri Feb 14 21:05:15 2020	(r357936)
+++ vendor/llvm-project/release-10.x/clang/lib/Driver/Job.cpp	Fri Feb 14 21:24:03 2020	(r357937)
@@ -371,14 +371,29 @@ int Command::Execute(ArrayRef<llvm::Optional<StringRef
                                    /*memoryLimit*/ 0, ErrMsg, ExecutionFailed);
 }
 
+CC1Command::CC1Command(const Action &Source, const Tool &Creator,
+                       const char *Executable,
+                       const llvm::opt::ArgStringList &Arguments,
+                       ArrayRef<InputInfo> Inputs)
+    : Command(Source, Creator, Executable, Arguments, Inputs) {
+  InProcess = true;
+}
+
 void CC1Command::Print(raw_ostream &OS, const char *Terminator, bool Quote,
                        CrashReportInfo *CrashInfo) const {
-  OS << " (in-process)\n";
+  if (InProcess)
+    OS << " (in-process)\n";
   Command::Print(OS, Terminator, Quote, CrashInfo);
 }
 
-int CC1Command::Execute(ArrayRef<llvm::Optional<StringRef>> /*Redirects*/,
+int CC1Command::Execute(ArrayRef<llvm::Optional<StringRef>> Redirects,
                         std::string *ErrMsg, bool *ExecutionFailed) const {
+  // FIXME: Currently, if there're more than one job, we disable
+  // -fintegrate-cc1. If we're no longer a integrated-cc1 job, fallback to
+  // out-of-process execution. See discussion in https://reviews.llvm.org/D74447
+  if (!InProcess)
+    return Command::Execute(Redirects, ErrMsg, ExecutionFailed);
+
   PrintFileNames();
 
   SmallVector<const char *, 128> Argv;

Modified: vendor/llvm-project/release-10.x/clang/lib/Driver/ToolChains/Clang.cpp
==============================================================================
--- vendor/llvm-project/release-10.x/clang/lib/Driver/ToolChains/Clang.cpp	Fri Feb 14 21:05:15 2020	(r357936)
+++ vendor/llvm-project/release-10.x/clang/lib/Driver/ToolChains/Clang.cpp	Fri Feb 14 21:24:03 2020	(r357937)
@@ -4679,6 +4679,11 @@ void Clang::ConstructJob(Compilation &C, const JobActi
                                                  : "-");
   }
 
+  // Give the gen diagnostics more chances to succeed, by avoiding intentional
+  // crashes.
+  if (D.CCGenDiagnostics)
+    CmdArgs.push_back("-disable-pragma-debug-crash");
+
   bool UseSeparateSections = isUseSeparateSections(Triple);
 
   if (Args.hasFlag(options::OPT_ffunction_sections,
@@ -6048,7 +6053,7 @@ void Clang::ConstructJob(Compilation &C, const JobActi
   if (Output.getType() == types::TY_Object &&
       Args.hasFlag(options::OPT__SLASH_showFilenames,
                    options::OPT__SLASH_showFilenames_, false)) {
-    C.getJobs().getJobs().back()->setPrintInputFilenames(true);
+    C.getJobs().getJobs().back()->PrintInputFilenames = true;
   }
 
   if (Arg *A = Args.getLastArg(options::OPT_pg))

Modified: vendor/llvm-project/release-10.x/clang/lib/Driver/ToolChains/Cuda.cpp
==============================================================================
--- vendor/llvm-project/release-10.x/clang/lib/Driver/ToolChains/Cuda.cpp	Fri Feb 14 21:05:15 2020	(r357936)
+++ vendor/llvm-project/release-10.x/clang/lib/Driver/ToolChains/Cuda.cpp	Fri Feb 14 21:24:03 2020	(r357937)
@@ -32,37 +32,24 @@ using namespace llvm::opt;
 
 // Parses the contents of version.txt in an CUDA installation.  It should
 // contain one line of the from e.g. "CUDA Version 7.5.2".
-static CudaVersion ParseCudaVersionFile(llvm::StringRef V) {
+static CudaVersion ParseCudaVersionFile(const Driver &D, llvm::StringRef V) {
   if (!V.startswith("CUDA Version "))
     return CudaVersion::UNKNOWN;
   V = V.substr(strlen("CUDA Version "));
-  int Major = -1, Minor = -1;
-  auto First = V.split('.');
-  auto Second = First.second.split('.');
-  if (First.first.getAsInteger(10, Major) ||
-      Second.first.getAsInteger(10, Minor))
+  SmallVector<StringRef,4> VersionParts;
+  V.split(VersionParts, '.');
+  if (VersionParts.size() < 2)
     return CudaVersion::UNKNOWN;
+  std::string MajorMinor = join_items(".", VersionParts[0], VersionParts[1]);
+  CudaVersion Version = CudaStringToVersion(MajorMinor);
+  if (Version != CudaVersion::UNKNOWN)
+    return Version;
 
-  if (Major == 7 && Minor == 0) {
-    // This doesn't appear to ever happen -- version.txt doesn't exist in the
-    // CUDA 7 installs I've seen.  But no harm in checking.
-    return CudaVersion::CUDA_70;
-  }
-  if (Major == 7 && Minor == 5)
-    return CudaVersion::CUDA_75;
-  if (Major == 8 && Minor == 0)
-    return CudaVersion::CUDA_80;
-  if (Major == 9 && Minor == 0)
-    return CudaVersion::CUDA_90;
-  if (Major == 9 && Minor == 1)
-    return CudaVersion::CUDA_91;
-  if (Major == 9 && Minor == 2)
-    return CudaVersion::CUDA_92;
-  if (Major == 10 && Minor == 0)
-    return CudaVersion::CUDA_100;
-  if (Major == 10 && Minor == 1)
-    return CudaVersion::CUDA_101;
-  return CudaVersion::UNKNOWN;
+  // Issue a warning and assume that the version we've found is compatible with
+  // the latest version we support.
+  D.Diag(diag::warn_drv_unknown_cuda_version)
+      << MajorMinor << CudaVersionToString(CudaVersion::LATEST);
+  return CudaVersion::LATEST;
 }
 
 CudaInstallationDetector::CudaInstallationDetector(
@@ -160,7 +147,7 @@ CudaInstallationDetector::CudaInstallationDetector(
       // version.txt isn't present.
       Version = CudaVersion::CUDA_70;
     } else {
-      Version = ParseCudaVersionFile((*VersionFile)->getBuffer());
+      Version = ParseCudaVersionFile(D, (*VersionFile)->getBuffer());
     }
 
     if (Version >= CudaVersion::CUDA_90) {

Modified: vendor/llvm-project/release-10.x/clang/lib/Frontend/CompilerInvocation.cpp
==============================================================================
--- vendor/llvm-project/release-10.x/clang/lib/Frontend/CompilerInvocation.cpp	Fri Feb 14 21:05:15 2020	(r357936)
+++ vendor/llvm-project/release-10.x/clang/lib/Frontend/CompilerInvocation.cpp	Fri Feb 14 21:24:03 2020	(r357937)
@@ -3440,6 +3440,7 @@ static void ParsePreprocessorArgs(PreprocessorOptions 
     Opts.LexEditorPlaceholders = false;
 
   Opts.SetUpStaticAnalyzer = Args.hasArg(OPT_setup_static_analyzer);
+  Opts.DisablePragmaDebugCrash = Args.hasArg(OPT_disable_pragma_debug_crash);
 }
 
 static void ParsePreprocessorOutputArgs(PreprocessorOutputOptions &Opts,

Modified: vendor/llvm-project/release-10.x/clang/lib/Headers/__clang_cuda_intrinsics.h
==============================================================================
--- vendor/llvm-project/release-10.x/clang/lib/Headers/__clang_cuda_intrinsics.h	Fri Feb 14 21:05:15 2020	(r357936)
+++ vendor/llvm-project/release-10.x/clang/lib/Headers/__clang_cuda_intrinsics.h	Fri Feb 14 21:24:03 2020	(r357937)
@@ -45,7 +45,7 @@
     _Static_assert(sizeof(__val) == sizeof(__Bits));                           \
     _Static_assert(sizeof(__Bits) == 2 * sizeof(int));                         \
     __Bits __tmp;                                                              \
-    memcpy(&__val, &__tmp, sizeof(__val));                                     \
+    memcpy(&__tmp, &__val, sizeof(__val));                                \
     __tmp.__a = ::__FnName(__tmp.__a, __offset, __width);                      \
     __tmp.__b = ::__FnName(__tmp.__b, __offset, __width);                      \
     long long __ret;                                                           \
@@ -129,7 +129,7 @@ __MAKE_SHUFFLES(__shfl_xor, __nvvm_shfl_bfly_i32, __nv
     _Static_assert(sizeof(__val) == sizeof(__Bits));                           \
     _Static_assert(sizeof(__Bits) == 2 * sizeof(int));                         \
     __Bits __tmp;                                                              \
-    memcpy(&__val, &__tmp, sizeof(__val));                                     \
+    memcpy(&__tmp, &__val, sizeof(__val));                                     \
     __tmp.__a = ::__FnName(__mask, __tmp.__a, __offset, __width);              \
     __tmp.__b = ::__FnName(__mask, __tmp.__b, __offset, __width);              \
     long long __ret;                                                           \

Modified: vendor/llvm-project/release-10.x/clang/lib/Headers/__clang_cuda_runtime_wrapper.h
==============================================================================
--- vendor/llvm-project/release-10.x/clang/lib/Headers/__clang_cuda_runtime_wrapper.h	Fri Feb 14 21:05:15 2020	(r357936)
+++ vendor/llvm-project/release-10.x/clang/lib/Headers/__clang_cuda_runtime_wrapper.h	Fri Feb 14 21:24:03 2020	(r357937)
@@ -48,7 +48,7 @@
 #include "cuda.h"
 #if !defined(CUDA_VERSION)
 #error "cuda.h did not define CUDA_VERSION"
-#elif CUDA_VERSION < 7000 || CUDA_VERSION > 10010
+#elif CUDA_VERSION < 7000
 #error "Unsupported CUDA version!"
 #endif
 

Modified: vendor/llvm-project/release-10.x/clang/lib/Headers/xmmintrin.h
==============================================================================
--- vendor/llvm-project/release-10.x/clang/lib/Headers/xmmintrin.h	Fri Feb 14 21:05:15 2020	(r357936)
+++ vendor/llvm-project/release-10.x/clang/lib/Headers/xmmintrin.h	Fri Feb 14 21:24:03 2020	(r357937)
@@ -2181,7 +2181,7 @@ void _mm_sfence(void);
 ///    3: Bits [63:48] are copied to the destination.
 /// \returns A 16-bit integer containing the extracted 16 bits of packed data.
 #define _mm_extract_pi16(a, n) \
-  (int)__builtin_ia32_vec_ext_v4hi((__m64)a, (int)n)
+  (int)__builtin_ia32_vec_ext_v4hi((__v4hi)a, (int)n)
 
 /// Copies data from the 64-bit vector of [4 x i16] to the destination,
 ///    and inserts the lower 16-bits of an integer operand at the 16-bit offset
@@ -2212,7 +2212,7 @@ void _mm_sfence(void);
 /// \returns A 64-bit integer vector containing the copied packed data from the
 ///    operands.
 #define _mm_insert_pi16(a, d, n) \
-  (__m64)__builtin_ia32_vec_set_v4hi((__m64)a, (int)d, (int)n)
+  (__m64)__builtin_ia32_vec_set_v4hi((__v4hi)a, (int)d, (int)n)
 
 /// Compares each of the corresponding packed 16-bit integer values of
 ///    the 64-bit integer vectors, and writes the greater value to the

Modified: vendor/llvm-project/release-10.x/clang/lib/Lex/Lexer.cpp
==============================================================================
--- vendor/llvm-project/release-10.x/clang/lib/Lex/Lexer.cpp	Fri Feb 14 21:05:15 2020	(r357936)
+++ vendor/llvm-project/release-10.x/clang/lib/Lex/Lexer.cpp	Fri Feb 14 21:24:03 2020	(r357937)
@@ -2552,8 +2552,8 @@ bool Lexer::SkipBlockComment(Token &Result, const char
         '/', '/', '/', '/',  '/', '/', '/', '/',
         '/', '/', '/', '/',  '/', '/', '/', '/'
       };
-      while (CurPtr+16 <= BufferEnd &&
-             !vec_any_eq(*(const vector unsigned char*)CurPtr, Slashes))
+      while (CurPtr + 16 <= BufferEnd &&
+             !vec_any_eq(*(const __vector unsigned char *)CurPtr, Slashes))
         CurPtr += 16;
 #else
       // Scan for '/' quickly.  Many block comments are very large.

Modified: vendor/llvm-project/release-10.x/clang/lib/Lex/Pragma.cpp
==============================================================================
--- vendor/llvm-project/release-10.x/clang/lib/Lex/Pragma.cpp	Fri Feb 14 21:05:15 2020	(r357936)
+++ vendor/llvm-project/release-10.x/clang/lib/Lex/Pragma.cpp	Fri Feb 14 21:24:03 2020	(r357937)
@@ -30,6 +30,7 @@
 #include "clang/Lex/PPCallbacks.h"
 #include "clang/Lex/Preprocessor.h"
 #include "clang/Lex/PreprocessorLexer.h"
+#include "clang/Lex/PreprocessorOptions.h"
 #include "clang/Lex/Token.h"
 #include "clang/Lex/TokenLexer.h"
 #include "llvm/ADT/ArrayRef.h"
@@ -39,7 +40,6 @@
 #include "llvm/ADT/SmallVector.h"
 #include "llvm/ADT/StringSwitch.h"
 #include "llvm/ADT/StringRef.h"
-#include "llvm/Support/CrashRecoveryContext.h"
 #include "llvm/Support/Compiler.h"
 #include "llvm/Support/ErrorHandling.h"
 #include <algorithm>
@@ -1035,15 +1035,19 @@ struct PragmaDebugHandler : public PragmaHandler {
     IdentifierInfo *II = Tok.getIdentifierInfo();
 
     if (II->isStr("assert")) {
-      llvm_unreachable("This is an assertion!");
+      if (!PP.getPreprocessorOpts().DisablePragmaDebugCrash)
+        llvm_unreachable("This is an assertion!");
     } else if (II->isStr("crash")) {
-      LLVM_BUILTIN_TRAP;
+      if (!PP.getPreprocessorOpts().DisablePragmaDebugCrash)
+        LLVM_BUILTIN_TRAP;
     } else if (II->isStr("parser_crash")) {
-      Token Crasher;
-      Crasher.startToken();
-      Crasher.setKind(tok::annot_pragma_parser_crash);
-      Crasher.setAnnotationRange(SourceRange(Tok.getLocation()));
-      PP.EnterToken(Crasher, /*IsReinject*/false);
+      if (!PP.getPreprocessorOpts().DisablePragmaDebugCrash) {
+        Token Crasher;
+        Crasher.startToken();
+        Crasher.setKind(tok::annot_pragma_parser_crash);
+        Crasher.setAnnotationRange(SourceRange(Tok.getLocation()));
+        PP.EnterToken(Crasher, /*IsReinject*/ false);
+      }
     } else if (II->isStr("dump")) {
       Token Identifier;
       PP.LexUnexpandedToken(Identifier);
@@ -1075,9 +1079,11 @@ struct PragmaDebugHandler : public PragmaHandler {
             << II->getName();
       }
     } else if (II->isStr("llvm_fatal_error")) {
-      llvm::report_fatal_error("#pragma clang __debug llvm_fatal_error");
+      if (!PP.getPreprocessorOpts().DisablePragmaDebugCrash)
+        llvm::report_fatal_error("#pragma clang __debug llvm_fatal_error");
     } else if (II->isStr("llvm_unreachable")) {
-      llvm_unreachable("#pragma clang __debug llvm_unreachable");
+      if (!PP.getPreprocessorOpts().DisablePragmaDebugCrash)
+        llvm_unreachable("#pragma clang __debug llvm_unreachable");
     } else if (II->isStr("macro")) {
       Token MacroName;
       PP.LexUnexpandedToken(MacroName);
@@ -1104,11 +1110,8 @@ struct PragmaDebugHandler : public PragmaHandler {
       }
       M->dump();
     } else if (II->isStr("overflow_stack")) {
-      DebugOverflowStack();
-    } else if (II->isStr("handle_crash")) {
-      llvm::CrashRecoveryContext *CRC =llvm::CrashRecoveryContext::GetCurrent();
-      if (CRC)
-        CRC->HandleCrash();
+      if (!PP.getPreprocessorOpts().DisablePragmaDebugCrash)
+        DebugOverflowStack();
     } else if (II->isStr("captured")) {
       HandleCaptured(PP);
     } else {

Modified: vendor/llvm-project/release-10.x/clang/lib/Parse/ParseDecl.cpp
==============================================================================
--- vendor/llvm-project/release-10.x/clang/lib/Parse/ParseDecl.cpp	Fri Feb 14 21:05:15 2020	(r357936)
+++ vendor/llvm-project/release-10.x/clang/lib/Parse/ParseDecl.cpp	Fri Feb 14 21:24:03 2020	(r357937)
@@ -5060,6 +5060,8 @@ bool Parser::isDeclarationSpecifier(bool Disambiguatin
     // recurse to handle whatever we get.
     if (TryAnnotateTypeOrScopeToken())
       return true;
+    if (TryAnnotateTypeConstraint())
+      return true;
     if (Tok.is(tok::identifier))
       return false;
 
@@ -5192,11 +5194,14 @@ bool Parser::isDeclarationSpecifier(bool Disambiguatin
 
     // placeholder-type-specifier
   case tok::annot_template_id: {
-    TemplateIdAnnotation *TemplateId = takeTemplateIdAnnotation(Tok);
-    return TemplateId->Kind == TNK_Concept_template &&
+    return isTypeConstraintAnnotation() &&
         (NextToken().is(tok::kw_auto) || NextToken().is(tok::kw_decltype));
   }
-
+  case tok::annot_cxxscope:
+    if (NextToken().is(tok::identifier) && TryAnnotateTypeConstraint())
+      return true;
+    return isTypeConstraintAnnotation() &&
+        GetLookAheadToken(2).isOneOf(tok::kw_auto, tok::kw_decltype);
   case tok::kw___declspec:
   case tok::kw___cdecl:
   case tok::kw___stdcall:

Modified: vendor/llvm-project/release-10.x/clang/lib/Parse/ParseDeclCXX.cpp
==============================================================================
--- vendor/llvm-project/release-10.x/clang/lib/Parse/ParseDeclCXX.cpp	Fri Feb 14 21:05:15 2020	(r357936)
+++ vendor/llvm-project/release-10.x/clang/lib/Parse/ParseDeclCXX.cpp	Fri Feb 14 21:24:03 2020	(r357937)
@@ -2716,7 +2716,7 @@ Parser::ParseCXXClassMemberDeclaration(AccessSpecifier
     // C++11 [dcl.attr.grammar] p4: If an attribute-specifier-seq appertains
     // to a friend declaration, that declaration shall be a definition.
     if (DeclaratorInfo.isFunctionDeclarator() &&
-        DefinitionKind != FDK_Definition && DS.isFriendSpecified()) {
+        DefinitionKind == FDK_Declaration && DS.isFriendSpecified()) {
       // Diagnose attributes that appear before decl specifier:
       // [[]] friend int foo();
       ProhibitAttributes(FnAttrs);

Modified: vendor/llvm-project/release-10.x/clang/lib/Parse/ParseExprCXX.cpp
==============================================================================
--- vendor/llvm-project/release-10.x/clang/lib/Parse/ParseExprCXX.cpp	Fri Feb 14 21:05:15 2020	(r357936)
+++ vendor/llvm-project/release-10.x/clang/lib/Parse/ParseExprCXX.cpp	Fri Feb 14 21:24:03 2020	(r357937)
@@ -3374,25 +3374,6 @@ ExprResult Parser::ParseRequiresExpression() {
           Diag(Tok, diag::err_requires_expr_missing_arrow)
               << FixItHint::CreateInsertion(Tok.getLocation(), "->");
         // Try to parse a 'type-constraint'
-        CXXScopeSpec SS;
-        if (ParseOptionalCXXScopeSpecifier(SS, ParsedType(),
-                                           /*EnteringContext=*/false,
-                                           /*MayBePseudoDestructor=*/nullptr,
-                                           // If this is not a type-constraint,
-                                           // then this scope-spec is part of
-                                           // the typename of a non-type
-                                           // template parameter
-                                           /*IsTypename=*/true,
-                                           /*LastII=*/nullptr,
-                                           // We won't find concepts in
-                                           // non-namespaces anyway, so might as
-                                           // well parse this correctly for
-                                           // possible type names.
-                                           /*OnlyNamespace=*/false,
-                                           /*SuppressDiagnostic=*/true)) {
-          SkipUntil(tok::semi, tok::r_brace, SkipUntilFlags::StopBeforeMatch);
-          break;
-        }
         if (TryAnnotateTypeConstraint()) {
           SkipUntil(tok::semi, tok::r_brace, SkipUntilFlags::StopBeforeMatch);
           break;
@@ -3402,8 +3383,13 @@ ExprResult Parser::ParseRequiresExpression() {
           SkipUntil(tok::semi, tok::r_brace, SkipUntilFlags::StopBeforeMatch);
           break;
         }
-        if (Tok.is(tok::annot_cxxscope))
+        CXXScopeSpec SS;
+        if (Tok.is(tok::annot_cxxscope)) {
+          Actions.RestoreNestedNameSpecifierAnnotation(Tok.getAnnotationValue(),
+                                                       Tok.getAnnotationRange(),
+                                                       SS);
           ConsumeAnnotationToken();
+        }
 
         Req = Actions.ActOnCompoundRequirement(
             Expression.get(), NoexceptLoc, SS, takeTemplateIdAnnotation(Tok),
@@ -3490,6 +3476,7 @@ ExprResult Parser::ParseRequiresExpression() {
           // We need to consume the typename to allow 'requires { typename a; }'
           SourceLocation TypenameKWLoc = ConsumeToken();
           if (TryAnnotateCXXScopeToken()) {
+            TPA.Commit();
             SkipUntil(tok::semi, tok::r_brace, SkipUntilFlags::StopBeforeMatch);
             break;
           }

Modified: vendor/llvm-project/release-10.x/clang/lib/Sema/SemaCast.cpp
==============================================================================
--- vendor/llvm-project/release-10.x/clang/lib/Sema/SemaCast.cpp	Fri Feb 14 21:05:15 2020	(r357936)
+++ vendor/llvm-project/release-10.x/clang/lib/Sema/SemaCast.cpp	Fri Feb 14 21:24:03 2020	(r357937)
@@ -2311,6 +2311,24 @@ static TryCastResult TryReinterpretCast(Sema &Self, Ex
     return SuccessResult;
   }
 
+  // Diagnose address space conversion in nested pointers.
+  QualType DestPtee = DestType->getPointeeType().isNull()
+                          ? DestType->getPointeeType()
+                          : DestType->getPointeeType()->getPointeeType();
+  QualType SrcPtee = SrcType->getPointeeType().isNull()
+                         ? SrcType->getPointeeType()
+                         : SrcType->getPointeeType()->getPointeeType();
+  while (!DestPtee.isNull() && !SrcPtee.isNull()) {
+    if (DestPtee.getAddressSpace() != SrcPtee.getAddressSpace()) {
+      Self.Diag(OpRange.getBegin(),
+                diag::warn_bad_cxx_cast_nested_pointer_addr_space)
+          << CStyle << SrcType << DestType << SrcExpr.get()->getSourceRange();
+      break;
+    }
+    DestPtee = DestPtee->getPointeeType();
+    SrcPtee = SrcPtee->getPointeeType();
+  }
+
   // C++ 5.2.10p7: A pointer to an object can be explicitly converted to
   //   a pointer to an object of different type.
   // Void pointers are not specified, but supported by every compiler out there.

Modified: vendor/llvm-project/release-10.x/clang/lib/Sema/SemaConcept.cpp
==============================================================================
--- vendor/llvm-project/release-10.x/clang/lib/Sema/SemaConcept.cpp	Fri Feb 14 21:05:15 2020	(r357936)
+++ vendor/llvm-project/release-10.x/clang/lib/Sema/SemaConcept.cpp	Fri Feb 14 21:24:03 2020	(r357937)

*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***



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