svn commit: r327657 - in projects/clang600-import: contrib/compiler-rt/lib/profile contrib/libc++ contrib/libc++/include contrib/llvm/include/llvm/CodeGen contrib/llvm/include/llvm/IR contrib/llvm/...

Dimitry Andric dim at FreeBSD.org
Sat Jan 6 23:44:17 UTC 2018


Author: dim
Date: Sat Jan  6 23:44:14 2018
New Revision: 327657
URL: https://svnweb.freebsd.org/changeset/base/327657

Log:
  Merge llvm, clang, lld, lldb, compiler-rt and libc++ release_60 r321788,
  update build glue and version numbers.

Modified:
  projects/clang600-import/contrib/compiler-rt/lib/profile/GCDAProfiling.c
  projects/clang600-import/contrib/libc++/CREDITS.TXT
  projects/clang600-import/contrib/libc++/include/__config
  projects/clang600-import/contrib/libc++/include/__functional_base
  projects/clang600-import/contrib/libc++/include/__mutex_base
  projects/clang600-import/contrib/libc++/include/chrono
  projects/clang600-import/contrib/libc++/include/functional
  projects/clang600-import/contrib/libc++/include/memory
  projects/clang600-import/contrib/libc++/include/mutex
  projects/clang600-import/contrib/libc++/include/optional
  projects/clang600-import/contrib/libc++/include/ratio
  projects/clang600-import/contrib/libc++/include/system_error
  projects/clang600-import/contrib/libc++/include/tuple
  projects/clang600-import/contrib/libc++/include/type_traits
  projects/clang600-import/contrib/libc++/include/utility
  projects/clang600-import/contrib/libc++/include/variant
  projects/clang600-import/contrib/llvm/include/llvm/CodeGen/TargetPassConfig.h
  projects/clang600-import/contrib/llvm/include/llvm/IR/Function.h
  projects/clang600-import/contrib/llvm/include/llvm/IR/IntrinsicsAMDGPU.td
  projects/clang600-import/contrib/llvm/include/llvm/Support/CommandLine.h
  projects/clang600-import/contrib/llvm/include/llvm/Support/TargetRegistry.h
  projects/clang600-import/contrib/llvm/include/llvm/Transforms/Scalar/LoopPassManager.h
  projects/clang600-import/contrib/llvm/lib/Analysis/InstructionSimplify.cpp
  projects/clang600-import/contrib/llvm/lib/Analysis/ScalarEvolution.cpp
  projects/clang600-import/contrib/llvm/lib/Analysis/ScalarEvolutionExpander.cpp
  projects/clang600-import/contrib/llvm/lib/Analysis/ValueTracking.cpp
  projects/clang600-import/contrib/llvm/lib/CodeGen/CodeGenPrepare.cpp
  projects/clang600-import/contrib/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp
  projects/clang600-import/contrib/llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp
  projects/clang600-import/contrib/llvm/lib/CodeGen/LLVMTargetMachine.cpp
  projects/clang600-import/contrib/llvm/lib/CodeGen/LiveDebugVariables.cpp
  projects/clang600-import/contrib/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
  projects/clang600-import/contrib/llvm/lib/CodeGen/SelectionDAG/FastISel.cpp
  projects/clang600-import/contrib/llvm/lib/CodeGen/SelectionDAG/FunctionLoweringInfo.cpp
  projects/clang600-import/contrib/llvm/lib/CodeGen/SelectionDAG/LegalizeVectorOps.cpp
  projects/clang600-import/contrib/llvm/lib/CodeGen/SelectionDAG/LegalizeVectorTypes.cpp
  projects/clang600-import/contrib/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
  projects/clang600-import/contrib/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
  projects/clang600-import/contrib/llvm/lib/CodeGen/TargetPassConfig.cpp
  projects/clang600-import/contrib/llvm/lib/CodeGen/WinEHPrepare.cpp
  projects/clang600-import/contrib/llvm/lib/IR/BasicBlock.cpp
  projects/clang600-import/contrib/llvm/lib/IR/Verifier.cpp
  projects/clang600-import/contrib/llvm/lib/MC/MCParser/ELFAsmParser.cpp
  projects/clang600-import/contrib/llvm/lib/Passes/PassBuilder.cpp
  projects/clang600-import/contrib/llvm/lib/Support/CommandLine.cpp
  projects/clang600-import/contrib/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
  projects/clang600-import/contrib/llvm/lib/Target/AArch64/AArch64RegisterInfo.td
  projects/clang600-import/contrib/llvm/lib/Target/AArch64/AArch64TargetMachine.cpp
  projects/clang600-import/contrib/llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp
  projects/clang600-import/contrib/llvm/lib/Target/AArch64/Disassembler/AArch64Disassembler.cpp
  projects/clang600-import/contrib/llvm/lib/Target/AArch64/MCTargetDesc/AArch64AsmBackend.cpp
  projects/clang600-import/contrib/llvm/lib/Target/AArch64/MCTargetDesc/AArch64MCTargetDesc.h
  projects/clang600-import/contrib/llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp
  projects/clang600-import/contrib/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUAsmBackend.cpp
  projects/clang600-import/contrib/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUMCTargetDesc.h
  projects/clang600-import/contrib/llvm/lib/Target/AMDGPU/MIMGInstructions.td
  projects/clang600-import/contrib/llvm/lib/Target/AMDGPU/SIISelLowering.cpp
  projects/clang600-import/contrib/llvm/lib/Target/AMDGPU/SIMachineFunctionInfo.cpp
  projects/clang600-import/contrib/llvm/lib/Target/AMDGPU/SIMachineFunctionInfo.h
  projects/clang600-import/contrib/llvm/lib/Target/ARM/MCTargetDesc/ARMAsmBackend.cpp
  projects/clang600-import/contrib/llvm/lib/Target/ARM/MCTargetDesc/ARMAsmBackend.h
  projects/clang600-import/contrib/llvm/lib/Target/ARM/MCTargetDesc/ARMAsmBackendDarwin.h
  projects/clang600-import/contrib/llvm/lib/Target/ARM/MCTargetDesc/ARMAsmBackendELF.h
  projects/clang600-import/contrib/llvm/lib/Target/ARM/MCTargetDesc/ARMAsmBackendWinCOFF.h
  projects/clang600-import/contrib/llvm/lib/Target/ARM/MCTargetDesc/ARMMCTargetDesc.h
  projects/clang600-import/contrib/llvm/lib/Target/AVR/MCTargetDesc/AVRAsmBackend.cpp
  projects/clang600-import/contrib/llvm/lib/Target/AVR/MCTargetDesc/AVRMCTargetDesc.h
  projects/clang600-import/contrib/llvm/lib/Target/BPF/MCTargetDesc/BPFAsmBackend.cpp
  projects/clang600-import/contrib/llvm/lib/Target/BPF/MCTargetDesc/BPFMCTargetDesc.h
  projects/clang600-import/contrib/llvm/lib/Target/Hexagon/HexagonLoopIdiomRecognition.cpp
  projects/clang600-import/contrib/llvm/lib/Target/Hexagon/HexagonPatterns.td
  projects/clang600-import/contrib/llvm/lib/Target/Hexagon/MCTargetDesc/HexagonAsmBackend.cpp
  projects/clang600-import/contrib/llvm/lib/Target/Hexagon/MCTargetDesc/HexagonMCTargetDesc.h
  projects/clang600-import/contrib/llvm/lib/Target/Lanai/MCTargetDesc/LanaiAsmBackend.cpp
  projects/clang600-import/contrib/llvm/lib/Target/Lanai/MCTargetDesc/LanaiMCTargetDesc.h
  projects/clang600-import/contrib/llvm/lib/Target/Mips/MCTargetDesc/MipsAsmBackend.cpp
  projects/clang600-import/contrib/llvm/lib/Target/Mips/MCTargetDesc/MipsMCTargetDesc.h
  projects/clang600-import/contrib/llvm/lib/Target/Mips/MipsISelLowering.cpp
  projects/clang600-import/contrib/llvm/lib/Target/PowerPC/MCTargetDesc/PPCAsmBackend.cpp
  projects/clang600-import/contrib/llvm/lib/Target/PowerPC/MCTargetDesc/PPCMCTargetDesc.h
  projects/clang600-import/contrib/llvm/lib/Target/PowerPC/PPCISelLowering.cpp
  projects/clang600-import/contrib/llvm/lib/Target/PowerPC/PPCInstrInfo.cpp
  projects/clang600-import/contrib/llvm/lib/Target/PowerPC/PPCInstrInfo.h
  projects/clang600-import/contrib/llvm/lib/Target/PowerPC/PPCMIPeephole.cpp
  projects/clang600-import/contrib/llvm/lib/Target/PowerPC/PPCPreEmitPeephole.cpp
  projects/clang600-import/contrib/llvm/lib/Target/RISCV/MCTargetDesc/RISCVAsmBackend.cpp
  projects/clang600-import/contrib/llvm/lib/Target/RISCV/MCTargetDesc/RISCVMCTargetDesc.h
  projects/clang600-import/contrib/llvm/lib/Target/RISCV/RISCVISelLowering.cpp
  projects/clang600-import/contrib/llvm/lib/Target/RISCV/RISCVInstrInfoC.td
  projects/clang600-import/contrib/llvm/lib/Target/Sparc/MCTargetDesc/SparcAsmBackend.cpp
  projects/clang600-import/contrib/llvm/lib/Target/Sparc/MCTargetDesc/SparcMCTargetDesc.h
  projects/clang600-import/contrib/llvm/lib/Target/SystemZ/MCTargetDesc/SystemZMCAsmBackend.cpp
  projects/clang600-import/contrib/llvm/lib/Target/SystemZ/MCTargetDesc/SystemZMCTargetDesc.h
  projects/clang600-import/contrib/llvm/lib/Target/WebAssembly/MCTargetDesc/WebAssemblyMCTargetDesc.cpp
  projects/clang600-import/contrib/llvm/lib/Target/X86/MCTargetDesc/X86AsmBackend.cpp
  projects/clang600-import/contrib/llvm/lib/Target/X86/MCTargetDesc/X86MCTargetDesc.h
  projects/clang600-import/contrib/llvm/lib/Target/X86/X86FixupBWInsts.cpp
  projects/clang600-import/contrib/llvm/lib/Target/X86/X86ISelLowering.cpp
  projects/clang600-import/contrib/llvm/lib/Target/X86/X86ISelLowering.h
  projects/clang600-import/contrib/llvm/lib/Target/X86/X86InstrAVX512.td
  projects/clang600-import/contrib/llvm/lib/Target/X86/X86InstrMMX.td
  projects/clang600-import/contrib/llvm/lib/Transforms/Coroutines/CoroSplit.cpp
  projects/clang600-import/contrib/llvm/lib/Transforms/InstCombine/InstCombineMulDivRem.cpp
  projects/clang600-import/contrib/llvm/lib/Transforms/Scalar/CallSiteSplitting.cpp
  projects/clang600-import/contrib/llvm/lib/Transforms/Scalar/GVNSink.cpp
  projects/clang600-import/contrib/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
  projects/clang600-import/contrib/llvm/lib/Transforms/Scalar/InductiveRangeCheckElimination.cpp
  projects/clang600-import/contrib/llvm/lib/Transforms/Scalar/JumpThreading.cpp
  projects/clang600-import/contrib/llvm/lib/Transforms/Scalar/LoopDeletion.cpp
  projects/clang600-import/contrib/llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp
  projects/clang600-import/contrib/llvm/lib/Transforms/Scalar/LoopUnswitch.cpp
  projects/clang600-import/contrib/llvm/lib/Transforms/Scalar/SCCP.cpp
  projects/clang600-import/contrib/llvm/lib/Transforms/Scalar/SimpleLoopUnswitch.cpp
  projects/clang600-import/contrib/llvm/lib/Transforms/Scalar/StructurizeCFG.cpp
  projects/clang600-import/contrib/llvm/lib/Transforms/Utils/BasicBlockUtils.cpp
  projects/clang600-import/contrib/llvm/lib/Transforms/Utils/BreakCriticalEdges.cpp
  projects/clang600-import/contrib/llvm/lib/Transforms/Utils/CallPromotionUtils.cpp
  projects/clang600-import/contrib/llvm/lib/Transforms/Utils/CloneFunction.cpp
  projects/clang600-import/contrib/llvm/lib/Transforms/Utils/Local.cpp
  projects/clang600-import/contrib/llvm/lib/Transforms/Utils/LoopUnroll.cpp
  projects/clang600-import/contrib/llvm/lib/Transforms/Utils/LoopUnrollRuntime.cpp
  projects/clang600-import/contrib/llvm/lib/Transforms/Utils/LoopUtils.cpp
  projects/clang600-import/contrib/llvm/lib/Transforms/Utils/SSAUpdater.cpp
  projects/clang600-import/contrib/llvm/lib/Transforms/Utils/SimplifyCFG.cpp
  projects/clang600-import/contrib/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp
  projects/clang600-import/contrib/llvm/tools/clang/include/clang/AST/StmtOpenMP.h
  projects/clang600-import/contrib/llvm/tools/clang/include/clang/Basic/DiagnosticDriverKinds.td
  projects/clang600-import/contrib/llvm/tools/clang/include/clang/Basic/DiagnosticGroups.td
  projects/clang600-import/contrib/llvm/tools/clang/include/clang/Basic/DiagnosticSemaKinds.td
  projects/clang600-import/contrib/llvm/tools/clang/include/clang/Basic/LangOptions.def
  projects/clang600-import/contrib/llvm/tools/clang/include/clang/Driver/Driver.h
  projects/clang600-import/contrib/llvm/tools/clang/include/clang/Driver/Options.td
  projects/clang600-import/contrib/llvm/tools/clang/include/clang/Parse/Parser.h
  projects/clang600-import/contrib/llvm/tools/clang/include/clang/Parse/RAIIObjectsForParser.h
  projects/clang600-import/contrib/llvm/tools/clang/include/clang/Sema/DeclSpec.h
  projects/clang600-import/contrib/llvm/tools/clang/include/clang/Sema/Sema.h
  projects/clang600-import/contrib/llvm/tools/clang/lib/AST/Decl.cpp
  projects/clang600-import/contrib/llvm/tools/clang/lib/Basic/Targets/X86.cpp
  projects/clang600-import/contrib/llvm/tools/clang/lib/Basic/Version.cpp
  projects/clang600-import/contrib/llvm/tools/clang/lib/CodeGen/CGDeclCXX.cpp
  projects/clang600-import/contrib/llvm/tools/clang/lib/CodeGen/CGException.cpp
  projects/clang600-import/contrib/llvm/tools/clang/lib/CodeGen/CGExpr.cpp
  projects/clang600-import/contrib/llvm/tools/clang/lib/CodeGen/CGOpenMPRuntime.cpp
  projects/clang600-import/contrib/llvm/tools/clang/lib/CodeGen/CGOpenMPRuntime.h
  projects/clang600-import/contrib/llvm/tools/clang/lib/CodeGen/CGStmt.cpp
  projects/clang600-import/contrib/llvm/tools/clang/lib/CodeGen/CGStmtOpenMP.cpp
  projects/clang600-import/contrib/llvm/tools/clang/lib/CodeGen/CodeGenFunction.cpp
  projects/clang600-import/contrib/llvm/tools/clang/lib/CodeGen/CodeGenFunction.h
  projects/clang600-import/contrib/llvm/tools/clang/lib/CodeGen/CodeGenModule.cpp
  projects/clang600-import/contrib/llvm/tools/clang/lib/Driver/Driver.cpp
  projects/clang600-import/contrib/llvm/tools/clang/lib/Driver/ToolChains/Clang.cpp
  projects/clang600-import/contrib/llvm/tools/clang/lib/Driver/ToolChains/Darwin.cpp
  projects/clang600-import/contrib/llvm/tools/clang/lib/Frontend/CompilerInvocation.cpp
  projects/clang600-import/contrib/llvm/tools/clang/lib/Frontend/InitPreprocessor.cpp
  projects/clang600-import/contrib/llvm/tools/clang/lib/Headers/emmintrin.h
  projects/clang600-import/contrib/llvm/tools/clang/lib/Headers/pmmintrin.h
  projects/clang600-import/contrib/llvm/tools/clang/lib/Headers/smmintrin.h
  projects/clang600-import/contrib/llvm/tools/clang/lib/Parse/ParseDecl.cpp
  projects/clang600-import/contrib/llvm/tools/clang/lib/Parse/ParseDeclCXX.cpp
  projects/clang600-import/contrib/llvm/tools/clang/lib/Parse/ParseExpr.cpp
  projects/clang600-import/contrib/llvm/tools/clang/lib/Parse/ParseExprCXX.cpp
  projects/clang600-import/contrib/llvm/tools/clang/lib/Parse/ParseObjc.cpp
  projects/clang600-import/contrib/llvm/tools/clang/lib/Parse/ParseOpenMP.cpp
  projects/clang600-import/contrib/llvm/tools/clang/lib/Parse/ParseStmt.cpp
  projects/clang600-import/contrib/llvm/tools/clang/lib/Parse/ParseTemplate.cpp
  projects/clang600-import/contrib/llvm/tools/clang/lib/Parse/Parser.cpp
  projects/clang600-import/contrib/llvm/tools/clang/lib/Sema/DeclSpec.cpp
  projects/clang600-import/contrib/llvm/tools/clang/lib/Sema/SemaCodeComplete.cpp
  projects/clang600-import/contrib/llvm/tools/clang/lib/Sema/SemaDecl.cpp
  projects/clang600-import/contrib/llvm/tools/clang/lib/Sema/SemaDeclCXX.cpp
  projects/clang600-import/contrib/llvm/tools/clang/lib/Sema/SemaDeclObjC.cpp
  projects/clang600-import/contrib/llvm/tools/clang/lib/Sema/SemaExpr.cpp
  projects/clang600-import/contrib/llvm/tools/clang/lib/Sema/SemaExprCXX.cpp
  projects/clang600-import/contrib/llvm/tools/clang/lib/Sema/SemaExprMember.cpp
  projects/clang600-import/contrib/llvm/tools/clang/lib/Sema/SemaLambda.cpp
  projects/clang600-import/contrib/llvm/tools/clang/lib/Sema/SemaOverload.cpp
  projects/clang600-import/contrib/llvm/tools/clang/lib/Sema/SemaStmt.cpp
  projects/clang600-import/contrib/llvm/tools/clang/lib/Sema/SemaTemplate.cpp
  projects/clang600-import/contrib/llvm/tools/clang/lib/Sema/SemaTemplateDeduction.cpp
  projects/clang600-import/contrib/llvm/tools/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp
  projects/clang600-import/contrib/llvm/tools/clang/lib/Sema/SemaType.cpp
  projects/clang600-import/contrib/llvm/tools/clang/lib/StaticAnalyzer/Core/BugReporter.cpp
  projects/clang600-import/contrib/llvm/tools/clang/tools/driver/cc1as_main.cpp
  projects/clang600-import/contrib/llvm/tools/lld/ELF/Driver.cpp
  projects/clang600-import/contrib/llvm/tools/lld/ELF/Relocations.cpp
  projects/clang600-import/contrib/llvm/tools/lld/ELF/SyntheticSections.cpp
  projects/clang600-import/contrib/llvm/tools/lldb/source/Core/Debugger.cpp
  projects/clang600-import/contrib/llvm/tools/lldb/source/Plugins/Instruction/ARM64/EmulateInstructionARM64.cpp
  projects/clang600-import/contrib/llvm/tools/llvm-mc/llvm-mc.cpp
  projects/clang600-import/contrib/llvm/tools/llvm-objcopy/Object.cpp
  projects/clang600-import/contrib/llvm/tools/llvm-objcopy/Object.h
  projects/clang600-import/contrib/llvm/utils/TableGen/CodeGenDAGPatterns.cpp
  projects/clang600-import/lib/clang/include/clang/Basic/Version.inc
  projects/clang600-import/lib/clang/include/clang/Config/config.h
  projects/clang600-import/lib/clang/include/lld/Common/Version.inc
  projects/clang600-import/lib/clang/include/llvm/Config/config.h
  projects/clang600-import/lib/clang/include/llvm/Config/llvm-config.h
  projects/clang600-import/lib/clang/include/llvm/Support/VCSRevision.h
Directory Properties:
  projects/clang600-import/contrib/compiler-rt/   (props changed)
  projects/clang600-import/contrib/libc++/   (props changed)
  projects/clang600-import/contrib/llvm/   (props changed)
  projects/clang600-import/contrib/llvm/tools/clang/   (props changed)
  projects/clang600-import/contrib/llvm/tools/lld/   (props changed)
  projects/clang600-import/contrib/llvm/tools/lldb/   (props changed)

Modified: projects/clang600-import/contrib/compiler-rt/lib/profile/GCDAProfiling.c
==============================================================================
--- projects/clang600-import/contrib/compiler-rt/lib/profile/GCDAProfiling.c	Sat Jan  6 23:24:52 2018	(r327656)
+++ projects/clang600-import/contrib/compiler-rt/lib/profile/GCDAProfiling.c	Sat Jan  6 23:44:14 2018	(r327657)
@@ -228,6 +228,7 @@ static void unmap_file() {
  * profiling enabled will emit to a different file. Only one file may be
  * started at a time.
  */
+COMPILER_RT_VISIBILITY
 void llvm_gcda_start_file(const char *orig_filename, const char version[4],
                           uint32_t checksum) {
   const char *mode = "r+b";
@@ -295,6 +296,7 @@ void llvm_gcda_start_file(const char *orig_filename, c
 /* Given an array of pointers to counters (counters), increment the n-th one,
  * where we're also given a pointer to n (predecessor).
  */
+COMPILER_RT_VISIBILITY
 void llvm_gcda_increment_indirect_counter(uint32_t *predecessor,
                                           uint64_t **counters) {
   uint64_t *counter;
@@ -317,6 +319,7 @@ void llvm_gcda_increment_indirect_counter(uint32_t *pr
 #endif
 }
 
+COMPILER_RT_VISIBILITY
 void llvm_gcda_emit_function(uint32_t ident, const char *function_name,
                              uint32_t func_checksum, uint8_t use_extra_checksum,
                              uint32_t cfg_checksum) {
@@ -343,6 +346,7 @@ void llvm_gcda_emit_function(uint32_t ident, const cha
     write_string(function_name);
 }
 
+COMPILER_RT_VISIBILITY
 void llvm_gcda_emit_arcs(uint32_t num_counters, uint64_t *counters) {
   uint32_t i;
   uint64_t *old_ctrs = NULL;
@@ -394,6 +398,7 @@ void llvm_gcda_emit_arcs(uint32_t num_counters, uint64
 #endif
 }
 
+COMPILER_RT_VISIBILITY
 void llvm_gcda_summary_info() {
   const uint32_t obj_summary_len = 9; /* Length for gcov compatibility. */
   uint32_t i;
@@ -447,6 +452,7 @@ void llvm_gcda_summary_info() {
 #endif
 }
 
+COMPILER_RT_VISIBILITY
 void llvm_gcda_end_file() {
   /* Write out EOF record. */
   if (output_file) {
@@ -459,6 +465,7 @@ void llvm_gcda_end_file() {
       unmap_file();
     }
 
+    fflush(output_file);
     lprofUnlockFd(fd);
     fclose(output_file);
     output_file = NULL;
@@ -471,6 +478,7 @@ void llvm_gcda_end_file() {
 #endif
 }
 
+COMPILER_RT_VISIBILITY
 void llvm_register_writeout_function(writeout_fn fn) {
   struct writeout_fn_node *new_node = malloc(sizeof(struct writeout_fn_node));
   new_node->fn = fn;
@@ -484,6 +492,7 @@ void llvm_register_writeout_function(writeout_fn fn) {
   }
 }
 
+COMPILER_RT_VISIBILITY
 void llvm_writeout_files(void) {
   struct writeout_fn_node *curr = writeout_fn_head;
 
@@ -493,6 +502,7 @@ void llvm_writeout_files(void) {
   }
 }
 
+COMPILER_RT_VISIBILITY
 void llvm_delete_writeout_function_list(void) {
   while (writeout_fn_head) {
     struct writeout_fn_node *node = writeout_fn_head;
@@ -503,6 +513,7 @@ void llvm_delete_writeout_function_list(void) {
   writeout_fn_head = writeout_fn_tail = NULL;
 }
 
+COMPILER_RT_VISIBILITY
 void llvm_register_flush_function(flush_fn fn) {
   struct flush_fn_node *new_node = malloc(sizeof(struct flush_fn_node));
   new_node->fn = fn;
@@ -516,6 +527,7 @@ void llvm_register_flush_function(flush_fn fn) {
   }
 }
 
+COMPILER_RT_VISIBILITY
 void __gcov_flush() {
   struct flush_fn_node *curr = flush_fn_head;
 
@@ -525,6 +537,7 @@ void __gcov_flush() {
   }
 }
 
+COMPILER_RT_VISIBILITY
 void llvm_delete_flush_function_list(void) {
   while (flush_fn_head) {
     struct flush_fn_node *node = flush_fn_head;
@@ -535,6 +548,7 @@ void llvm_delete_flush_function_list(void) {
   flush_fn_head = flush_fn_tail = NULL;
 }
 
+COMPILER_RT_VISIBILITY
 void llvm_gcov_init(writeout_fn wfn, flush_fn ffn) {
   static int atexit_ran = 0;
 

Modified: projects/clang600-import/contrib/libc++/CREDITS.TXT
==============================================================================
--- projects/clang600-import/contrib/libc++/CREDITS.TXT	Sat Jan  6 23:24:52 2018	(r327656)
+++ projects/clang600-import/contrib/libc++/CREDITS.TXT	Sat Jan  6 23:44:14 2018	(r327657)
@@ -101,7 +101,7 @@ E: nico.rieck at gmail.com
 D: Windows fixes
 
 N: Jon Roelofs
-E: jonathan at codesourcery.com
+E: jroelofS at jroelofs.com
 D: Remote testing, Newlib port, baremetal/single-threaded support.
 
 N: Jonathan Sauer

Modified: projects/clang600-import/contrib/libc++/include/__config
==============================================================================
--- projects/clang600-import/contrib/libc++/include/__config	Sat Jan  6 23:24:52 2018	(r327656)
+++ projects/clang600-import/contrib/libc++/include/__config	Sat Jan  6 23:44:14 2018	(r327657)
@@ -461,9 +461,13 @@ namespace std {
 #endif 
 
 #if __has_builtin(__builtin_launder)
-#define	_LIBCPP_COMPILER_HAS_BUILTIN_LAUNDER
+#define _LIBCPP_COMPILER_HAS_BUILTIN_LAUNDER
 #endif
 
+#if !__is_identifier(__has_unique_object_representations)
+#define _LIBCPP_HAS_UNIQUE_OBJECT_REPRESENTATIONS
+#endif
+
 #elif defined(_LIBCPP_COMPILER_GCC)
 
 #define _ALIGNAS(x) __attribute__((__aligned__(x)))
@@ -547,9 +551,13 @@ namespace std {
 #endif
 
 #if _GNUC_VER >= 700
-#define	_LIBCPP_COMPILER_HAS_BUILTIN_LAUNDER
+#define _LIBCPP_COMPILER_HAS_BUILTIN_LAUNDER
 #endif
 
+#if _GNUC_VER >= 700
+#define _LIBCPP_HAS_UNIQUE_OBJECT_REPRESENTATIONS
+#endif
+
 #elif defined(_LIBCPP_COMPILER_MSVC)
 
 #define _LIBCPP_TOSTRING2(x) #x
@@ -980,9 +988,10 @@ template <unsigned> struct __static_assert_check {};
 #define _LIBCPP_NODISCARD_AFTER_CXX17
 #endif
 
-// FIXME: Remove all usages of this macro once compilers catch up.
-#if !defined(__cpp_inline_variables) || (__cpp_inline_variables < 201606L)
-# define _LIBCPP_HAS_NO_INLINE_VARIABLES
+#if _LIBCPP_STD_VER > 14 && defined(__cpp_inline_variables) && (__cpp_inline_variables >= 201606L)
+# define _LIBCPP_INLINE_VAR  inline
+#else
+# define _LIBCPP_INLINE_VAR  
 #endif
 
 #ifdef _LIBCPP_HAS_NO_RVALUE_REFERENCES

Modified: projects/clang600-import/contrib/libc++/include/__functional_base
==============================================================================
--- projects/clang600-import/contrib/libc++/include/__functional_base	Sat Jan  6 23:24:52 2018	(r327656)
+++ projects/clang600-import/contrib/libc++/include/__functional_base	Sat Jan  6 23:44:14 2018	(r327657)
@@ -564,7 +564,7 @@ struct _LIBCPP_TEMPLATE_VIS allocator_arg_t { };
 #if defined(_LIBCPP_CXX03_LANG) || defined(_LIBCPP_BUILDING_MEMORY)
 extern const allocator_arg_t allocator_arg;
 #else
-constexpr allocator_arg_t allocator_arg = allocator_arg_t();
+/* _LIBCPP_INLINE_VAR */ constexpr allocator_arg_t allocator_arg = allocator_arg_t();
 #endif
 
 // uses_allocator
@@ -601,7 +601,7 @@ struct _LIBCPP_TEMPLATE_VIS uses_allocator
 
 #if _LIBCPP_STD_VER > 14
 template <class _Tp, class _Alloc>
-constexpr size_t uses_allocator_v = uses_allocator<_Tp, _Alloc>::value;
+_LIBCPP_INLINE_VAR constexpr size_t uses_allocator_v = uses_allocator<_Tp, _Alloc>::value;
 #endif
 
 #ifndef _LIBCPP_CXX03_LANG

Modified: projects/clang600-import/contrib/libc++/include/__mutex_base
==============================================================================
--- projects/clang600-import/contrib/libc++/include/__mutex_base	Sat Jan  6 23:24:52 2018	(r327656)
+++ projects/clang600-import/contrib/libc++/include/__mutex_base	Sat Jan  6 23:44:14 2018	(r327657)
@@ -82,9 +82,9 @@ extern const adopt_lock_t  adopt_lock;
 
 #else
 
-constexpr defer_lock_t  defer_lock  = defer_lock_t();
-constexpr try_to_lock_t try_to_lock = try_to_lock_t();
-constexpr adopt_lock_t  adopt_lock  = adopt_lock_t();
+/* _LIBCPP_INLINE_VAR */ constexpr defer_lock_t  defer_lock  = defer_lock_t();
+/* _LIBCPP_INLINE_VAR */ constexpr try_to_lock_t try_to_lock = try_to_lock_t();
+/* _LIBCPP_INLINE_VAR */ constexpr adopt_lock_t  adopt_lock  = adopt_lock_t();
 
 #endif
 

Modified: projects/clang600-import/contrib/libc++/include/chrono
==============================================================================
--- projects/clang600-import/contrib/libc++/include/chrono	Sat Jan  6 23:24:52 2018	(r327656)
+++ projects/clang600-import/contrib/libc++/include/chrono	Sat Jan  6 23:44:14 2018	(r327657)
@@ -26,7 +26,7 @@ duration_cast(const duration<Rep, Period>& fd);
 
 template <class Rep> struct treat_as_floating_point : is_floating_point<Rep> {};
 
-template <class Rep> constexpr bool treat_as_floating_point_v
+template <class Rep> inline constexpr bool treat_as_floating_point_v
     = treat_as_floating_point<Rep>::value;                       // C++17
 
 template <class Rep>
@@ -419,7 +419,8 @@ template <class _Rep>
 struct _LIBCPP_TEMPLATE_VIS treat_as_floating_point : is_floating_point<_Rep> {};
 
 #if _LIBCPP_STD_VER > 14 && !defined(_LIBCPP_HAS_NO_VARIABLE_TEMPLATES)
-template <class _Rep> _LIBCPP_CONSTEXPR bool treat_as_floating_point_v
+template <class _Rep>
+_LIBCPP_INLINE_VAR _LIBCPP_CONSTEXPR bool treat_as_floating_point_v
     = treat_as_floating_point<_Rep>::value;
 #endif
 

Modified: projects/clang600-import/contrib/libc++/include/functional
==============================================================================
--- projects/clang600-import/contrib/libc++/include/functional	Sat Jan  6 23:24:52 2018	(r327656)
+++ projects/clang600-import/contrib/libc++/include/functional	Sat Jan  6 23:44:14 2018	(r327657)
@@ -213,9 +213,9 @@ template<class T> struct is_bind_expression;
 template<class T> struct is_placeholder;
 
     // See C++14 20.9.9, Function object binders
-template <class T> constexpr bool is_bind_expression_v
+template <class T> inline constexpr bool is_bind_expression_v
   = is_bind_expression<T>::value; // C++17
-template <class T> constexpr int is_placeholder_v
+template <class T> inline constexpr int is_placeholder_v
   = is_placeholder<T>::value; // C++17
 
 
@@ -1991,7 +1991,7 @@ template<class _Tp> struct _LIBCPP_TEMPLATE_VIS is_bin
 
 #if _LIBCPP_STD_VER > 14
 template <class _Tp>
-constexpr size_t is_bind_expression_v = is_bind_expression<_Tp>::value;
+_LIBCPP_INLINE_VAR constexpr size_t is_bind_expression_v = is_bind_expression<_Tp>::value;
 #endif
 
 template<class _Tp> struct __is_placeholder : public integral_constant<int, 0> {};
@@ -2000,7 +2000,7 @@ template<class _Tp> struct _LIBCPP_TEMPLATE_VIS is_pla
 
 #if _LIBCPP_STD_VER > 14
 template <class _Tp>
-constexpr size_t is_placeholder_v = is_placeholder<_Tp>::value;
+_LIBCPP_INLINE_VAR constexpr size_t is_placeholder_v = is_placeholder<_Tp>::value;
 #endif
 
 namespace placeholders
@@ -2020,16 +2020,16 @@ _LIBCPP_FUNC_VIS extern const __ph<8>   _8;
 _LIBCPP_FUNC_VIS extern const __ph<9>   _9;
 _LIBCPP_FUNC_VIS extern const __ph<10> _10;
 #else
-constexpr __ph<1>   _1{};
-constexpr __ph<2>   _2{};
-constexpr __ph<3>   _3{};
-constexpr __ph<4>   _4{};
-constexpr __ph<5>   _5{};
-constexpr __ph<6>   _6{};
-constexpr __ph<7>   _7{};
-constexpr __ph<8>   _8{};
-constexpr __ph<9>   _9{};
-constexpr __ph<10> _10{};
+/* _LIBCPP_INLINE_VAR */ constexpr __ph<1>   _1{};
+/* _LIBCPP_INLINE_VAR */ constexpr __ph<2>   _2{};
+/* _LIBCPP_INLINE_VAR */ constexpr __ph<3>   _3{};
+/* _LIBCPP_INLINE_VAR */ constexpr __ph<4>   _4{};
+/* _LIBCPP_INLINE_VAR */ constexpr __ph<5>   _5{};
+/* _LIBCPP_INLINE_VAR */ constexpr __ph<6>   _6{};
+/* _LIBCPP_INLINE_VAR */ constexpr __ph<7>   _7{};
+/* _LIBCPP_INLINE_VAR */ constexpr __ph<8>   _8{};
+/* _LIBCPP_INLINE_VAR */ constexpr __ph<9>   _9{};
+/* _LIBCPP_INLINE_VAR */ constexpr __ph<10> _10{};
 #endif // defined(_LIBCPP_CXX03_LANG) || defined(_LIBCPP_BUILDING_BIND)
 
 }  // placeholders

Modified: projects/clang600-import/contrib/libc++/include/memory
==============================================================================
--- projects/clang600-import/contrib/libc++/include/memory	Sat Jan  6 23:24:52 2018	(r327656)
+++ projects/clang600-import/contrib/libc++/include/memory	Sat Jan  6 23:44:14 2018	(r327657)
@@ -18,7 +18,7 @@ namespace std
 {
 
 struct allocator_arg_t { };
-constexpr allocator_arg_t allocator_arg = allocator_arg_t();
+inline constexpr allocator_arg_t allocator_arg = allocator_arg_t();
 
 template <class T, class Alloc> struct uses_allocator;
 
@@ -630,6 +630,9 @@ template<class T>
 template <class T> struct hash;
 template <class T, class D> struct hash<unique_ptr<T, D> >;
 template <class T> struct hash<shared_ptr<T> >;
+
+template <class T, class Alloc>
+  inline constexpr bool uses_allocator_v = uses_allocator<T, Alloc>::value;
 
 // Pointer safety
 enum class pointer_safety { relaxed, preferred, strict };

Modified: projects/clang600-import/contrib/libc++/include/mutex
==============================================================================
--- projects/clang600-import/contrib/libc++/include/mutex	Sat Jan  6 23:24:52 2018	(r327656)
+++ projects/clang600-import/contrib/libc++/include/mutex	Sat Jan  6 23:44:14 2018	(r327657)
@@ -91,9 +91,9 @@ struct defer_lock_t {};
 struct try_to_lock_t {};
 struct adopt_lock_t {};
 
-constexpr defer_lock_t  defer_lock{};
-constexpr try_to_lock_t try_to_lock{};
-constexpr adopt_lock_t  adopt_lock{};
+inline constexpr defer_lock_t  defer_lock{};
+inline constexpr try_to_lock_t try_to_lock{};
+inline constexpr adopt_lock_t  adopt_lock{};
 
 template <class Mutex>
 class lock_guard

Modified: projects/clang600-import/contrib/libc++/include/optional
==============================================================================
--- projects/clang600-import/contrib/libc++/include/optional	Sat Jan  6 23:24:52 2018	(r327656)
+++ projects/clang600-import/contrib/libc++/include/optional	Sat Jan  6 23:44:14 2018	(r327657)
@@ -22,7 +22,7 @@ namespace std {
 
   // 23.6.4, no-value state indicator
   struct nullopt_t{see below };
-  constexpr nullopt_t nullopt(unspecified );
+  inline constexpr nullopt_t nullopt(unspecified );
 
   // 23.6.5, class bad_optional_access
   class bad_optional_access;
@@ -195,7 +195,7 @@ struct nullopt_t
     _LIBCPP_INLINE_VISIBILITY constexpr explicit nullopt_t(__secret_tag, __secret_tag) noexcept {}
 };
 
-/* inline */ constexpr nullopt_t nullopt{nullopt_t::__secret_tag{}, nullopt_t::__secret_tag{}};
+_LIBCPP_INLINE_VAR constexpr nullopt_t nullopt{nullopt_t::__secret_tag{}, nullopt_t::__secret_tag{}};
 
 template <class _Tp, bool = is_trivially_destructible<_Tp>::value>
 struct __optional_destruct_base;

Modified: projects/clang600-import/contrib/libc++/include/ratio
==============================================================================
--- projects/clang600-import/contrib/libc++/include/ratio	Sat Jan  6 23:24:52 2018	(r327656)
+++ projects/clang600-import/contrib/libc++/include/ratio	Sat Jan  6 23:44:14 2018	(r327657)
@@ -63,17 +63,17 @@ typedef ratio<   1000000000000000000000, 1> zetta;  //
 typedef ratio<1000000000000000000000000, 1> yotta;  // not supported
 
   // 20.11.5, ratio comparison
-  template <class R1, class R2> constexpr bool ratio_equal_v
+  template <class R1, class R2> inline constexpr bool ratio_equal_v
     = ratio_equal<R1, R2>::value;                                       // C++17
-  template <class R1, class R2> constexpr bool ratio_not_equal_v
+  template <class R1, class R2> inline constexpr bool ratio_not_equal_v
     = ratio_not_equal<R1, R2>::value;                                   // C++17
-  template <class R1, class R2> constexpr bool ratio_less_v
+  template <class R1, class R2> inline constexpr bool ratio_less_v
     = ratio_less<R1, R2>::value;                                        // C++17
-  template <class R1, class R2> constexpr bool ratio_less_equal_v
+  template <class R1, class R2> inline constexpr bool ratio_less_equal_v
     = ratio_less_equal<R1, R2>::value;                                  // C++17
-  template <class R1, class R2> constexpr bool ratio_greater_v
+  template <class R1, class R2> inline constexpr bool ratio_greater_v
     = ratio_greater<R1, R2>::value;                                     // C++17
-  template <class R1, class R2> constexpr bool ratio_greater_equal_v
+  template <class R1, class R2> inline constexpr bool ratio_greater_equal_v
     = ratio_greater_equal<R1, R2>::value;                               // C++17
 }
 */
@@ -501,22 +501,28 @@ struct __ratio_gcd
 };
 
 #if _LIBCPP_STD_VER > 14 && !defined(_LIBCPP_HAS_NO_VARIABLE_TEMPLATES)
-template <class _R1, class _R2> _LIBCPP_CONSTEXPR bool ratio_equal_v
+template <class _R1, class _R2>
+_LIBCPP_INLINE_VAR _LIBCPP_CONSTEXPR bool ratio_equal_v
     = ratio_equal<_R1, _R2>::value;
 
-template <class _R1, class _R2> _LIBCPP_CONSTEXPR bool ratio_not_equal_v
+template <class _R1, class _R2>
+_LIBCPP_INLINE_VAR _LIBCPP_CONSTEXPR bool ratio_not_equal_v
     = ratio_not_equal<_R1, _R2>::value;
 
-template <class _R1, class _R2> _LIBCPP_CONSTEXPR bool ratio_less_v
+template <class _R1, class _R2>
+_LIBCPP_INLINE_VAR _LIBCPP_CONSTEXPR bool ratio_less_v
     = ratio_less<_R1, _R2>::value;
 
-template <class _R1, class _R2> _LIBCPP_CONSTEXPR bool ratio_less_equal_v
+template <class _R1, class _R2>
+_LIBCPP_INLINE_VAR _LIBCPP_CONSTEXPR bool ratio_less_equal_v
     = ratio_less_equal<_R1, _R2>::value;
 
-template <class _R1, class _R2> _LIBCPP_CONSTEXPR bool ratio_greater_v
+template <class _R1, class _R2>
+_LIBCPP_INLINE_VAR _LIBCPP_CONSTEXPR bool ratio_greater_v
     = ratio_greater<_R1, _R2>::value;
 
-template <class _R1, class _R2> _LIBCPP_CONSTEXPR bool ratio_greater_equal_v
+template <class _R1, class _R2>
+_LIBCPP_INLINE_VAR _LIBCPP_CONSTEXPR bool ratio_greater_equal_v
     = ratio_greater_equal<_R1, _R2>::value;
 #endif
 

Modified: projects/clang600-import/contrib/libc++/include/system_error
==============================================================================
--- projects/clang600-import/contrib/libc++/include/system_error	Sat Jan  6 23:24:52 2018	(r327656)
+++ projects/clang600-import/contrib/libc++/include/system_error	Sat Jan  6 23:44:14 2018	(r327657)
@@ -47,10 +47,10 @@ template <class T> struct is_error_condition_enum
     : public false_type {};
 
 template <class _Tp>
-constexpr size_t is_error_condition_enum_v = is_error_condition_enum<_Tp>::value; // C++17
+inline constexpr size_t is_error_condition_enum_v = is_error_condition_enum<_Tp>::value; // C++17
 
 template <class _Tp>
-constexpr size_t is_error_code_enum_v = is_error_code_enum<_Tp>::value; // C++17
+inline constexpr size_t is_error_code_enum_v = is_error_code_enum<_Tp>::value; // C++17
 
 class error_code
 {
@@ -246,7 +246,7 @@ struct _LIBCPP_TEMPLATE_VIS is_error_code_enum
 
 #if _LIBCPP_STD_VER > 14
 template <class _Tp>
-constexpr size_t is_error_code_enum_v = is_error_code_enum<_Tp>::value;
+_LIBCPP_INLINE_VAR constexpr size_t is_error_code_enum_v = is_error_code_enum<_Tp>::value;
 #endif
 
 // is_error_condition_enum
@@ -257,7 +257,7 @@ struct _LIBCPP_TEMPLATE_VIS is_error_condition_enum
 
 #if _LIBCPP_STD_VER > 14
 template <class _Tp>
-constexpr size_t is_error_condition_enum_v = is_error_condition_enum<_Tp>::value;
+_LIBCPP_INLINE_VAR constexpr size_t is_error_condition_enum_v = is_error_condition_enum<_Tp>::value;
 #endif
 
 // Some error codes are not present on all platforms, so we provide equivalents

Modified: projects/clang600-import/contrib/libc++/include/tuple
==============================================================================
--- projects/clang600-import/contrib/libc++/include/tuple	Sat Jan  6 23:24:52 2018	(r327656)
+++ projects/clang600-import/contrib/libc++/include/tuple	Sat Jan  6 23:44:14 2018	(r327657)
@@ -70,7 +70,7 @@ class tuple { (public)
     void swap(tuple&) noexcept(AND(swap(declval<T&>(), declval<T&>())...));
 };
 
-const unspecified ignore;
+inline constexpr unspecified ignore;
 
 template <class... T> tuple<V...>  make_tuple(T&&...); // constexpr in C++14
 template <class... T> tuple<ATypes...> forward_as_tuple(T&&...) noexcept; // constexpr in C++14
@@ -87,7 +87,7 @@ template <class T, class Tuple>
 template <class T> class tuple_size; // undefined
 template <class... T> class tuple_size<tuple<T...>>;
 template <class T>
- constexpr size_t tuple_size_v = tuple_size<T>::value; // C++17
+ inline constexpr size_t tuple_size_v = tuple_size<T>::value; // C++17
 template <size_t I, class T> class tuple_element; // undefined
 template <size_t I, class... T> class tuple_element<I, tuple<T...>>;
 template <size_t I, class T>
@@ -1079,7 +1079,7 @@ struct __ignore_t
 };
 
 namespace {
-  constexpr __ignore_t<unsigned char> ignore = __ignore_t<unsigned char>();
+  _LIBCPP_INLINE_VAR constexpr __ignore_t<unsigned char> ignore = __ignore_t<unsigned char>();
 }
 
 template <class _Tp>
@@ -1368,7 +1368,7 @@ pair<_T1, _T2>::pair(piecewise_construct_t,
 
 #if _LIBCPP_STD_VER > 14
 template <class _Tp>
-constexpr size_t tuple_size_v = tuple_size<_Tp>::value;
+_LIBCPP_INLINE_VAR constexpr size_t tuple_size_v = tuple_size<_Tp>::value;
 
 #define _LIBCPP_NOEXCEPT_RETURN(...) noexcept(noexcept(__VA_ARGS__)) { return __VA_ARGS__; }
 

Modified: projects/clang600-import/contrib/libc++/include/type_traits
==============================================================================
--- projects/clang600-import/contrib/libc++/include/type_traits	Sat Jan  6 23:24:52 2018	(r327656)
+++ projects/clang600-import/contrib/libc++/include/type_traits	Sat Jan  6 23:44:14 2018	(r327657)
@@ -132,6 +132,8 @@ namespace std
 
     template <class T> struct has_virtual_destructor;
 
+    template<class T> struct has_unique_object_representations;         // C++17
+
     // Relationships between types:
     template <class T, class U> struct is_same;
     template <class Base, class Derived> struct is_base_of;
@@ -223,173 +225,175 @@ namespace std
       using void_t = void;   // C++17
       
       // See C++14 20.10.4.1, primary type categories
-      template <class T> constexpr bool is_void_v
+      template <class T> inline constexpr bool is_void_v
         = is_void<T>::value;                                             // C++17
-      template <class T> constexpr bool is_null_pointer_v
+      template <class T> inline constexpr bool is_null_pointer_v
         = is_null_pointer<T>::value;                                     // C++17
-      template <class T> constexpr bool is_integral_v
+      template <class T> inline constexpr bool is_integral_v
         = is_integral<T>::value;                                         // C++17
-      template <class T> constexpr bool is_floating_point_v
+      template <class T> inline constexpr bool is_floating_point_v
         = is_floating_point<T>::value;                                   // C++17
-      template <class T> constexpr bool is_array_v
+      template <class T> inline constexpr bool is_array_v
         = is_array<T>::value;                                            // C++17
-      template <class T> constexpr bool is_pointer_v
+      template <class T> inline constexpr bool is_pointer_v
         = is_pointer<T>::value;                                          // C++17
-      template <class T> constexpr bool is_lvalue_reference_v
+      template <class T> inline constexpr bool is_lvalue_reference_v
         = is_lvalue_reference<T>::value;                                 // C++17
-      template <class T> constexpr bool is_rvalue_reference_v
+      template <class T> inline constexpr bool is_rvalue_reference_v
         = is_rvalue_reference<T>::value;                                 // C++17
-      template <class T> constexpr bool is_member_object_pointer_v
+      template <class T> inline constexpr bool is_member_object_pointer_v
         = is_member_object_pointer<T>::value;                            // C++17
-      template <class T> constexpr bool is_member_function_pointer_v
+      template <class T> inline constexpr bool is_member_function_pointer_v
         = is_member_function_pointer<T>::value;                          // C++17
-      template <class T> constexpr bool is_enum_v
+      template <class T> inline constexpr bool is_enum_v
         = is_enum<T>::value;                                             // C++17
-      template <class T> constexpr bool is_union_v
+      template <class T> inline constexpr bool is_union_v
         = is_union<T>::value;                                            // C++17
-      template <class T> constexpr bool is_class_v
+      template <class T> inline constexpr bool is_class_v
         = is_class<T>::value;                                            // C++17
-      template <class T> constexpr bool is_function_v
+      template <class T> inline constexpr bool is_function_v
         = is_function<T>::value;                                         // C++17
 
       // See C++14 20.10.4.2, composite type categories
-      template <class T> constexpr bool is_reference_v
+      template <class T> inline constexpr bool is_reference_v
         = is_reference<T>::value;                                        // C++17
-      template <class T> constexpr bool is_arithmetic_v
+      template <class T> inline constexpr bool is_arithmetic_v
         = is_arithmetic<T>::value;                                       // C++17
-      template <class T> constexpr bool is_fundamental_v
+      template <class T> inline constexpr bool is_fundamental_v
         = is_fundamental<T>::value;                                      // C++17
-      template <class T> constexpr bool is_object_v
+      template <class T> inline constexpr bool is_object_v
         = is_object<T>::value;                                           // C++17
-      template <class T> constexpr bool is_scalar_v
+      template <class T> inline constexpr bool is_scalar_v
         = is_scalar<T>::value;                                           // C++17
-      template <class T> constexpr bool is_compound_v
+      template <class T> inline constexpr bool is_compound_v
         = is_compound<T>::value;                                         // C++17
-      template <class T> constexpr bool is_member_pointer_v
+      template <class T> inline constexpr bool is_member_pointer_v
         = is_member_pointer<T>::value;                                   // C++17
 
       // See C++14 20.10.4.3, type properties
-      template <class T> constexpr bool is_const_v
+      template <class T> inline constexpr bool is_const_v
         = is_const<T>::value;                                            // C++17
-      template <class T> constexpr bool is_volatile_v
+      template <class T> inline constexpr bool is_volatile_v
         = is_volatile<T>::value;                                         // C++17
-      template <class T> constexpr bool is_trivial_v
+      template <class T> inline constexpr bool is_trivial_v
         = is_trivial<T>::value;                                          // C++17
-      template <class T> constexpr bool is_trivially_copyable_v
+      template <class T> inline constexpr bool is_trivially_copyable_v
         = is_trivially_copyable<T>::value;                               // C++17
-      template <class T> constexpr bool is_standard_layout_v
+      template <class T> inline constexpr bool is_standard_layout_v
         = is_standard_layout<T>::value;                                  // C++17
-      template <class T> constexpr bool is_pod_v
+      template <class T> inline constexpr bool is_pod_v
         = is_pod<T>::value;                                              // C++17
-      template <class T> constexpr bool is_literal_type_v
+      template <class T> inline constexpr bool is_literal_type_v
         = is_literal_type<T>::value;                                     // C++17
-      template <class T> constexpr bool is_empty_v
+      template <class T> inline constexpr bool is_empty_v
         = is_empty<T>::value;                                            // C++17
-      template <class T> constexpr bool is_polymorphic_v
+      template <class T> inline constexpr bool is_polymorphic_v
         = is_polymorphic<T>::value;                                      // C++17
-      template <class T> constexpr bool is_abstract_v
+      template <class T> inline constexpr bool is_abstract_v
         = is_abstract<T>::value;                                         // C++17
-      template <class T> constexpr bool is_final_v
+      template <class T> inline constexpr bool is_final_v
         = is_final<T>::value;                                            // C++17
-      template <class T> constexpr bool is_aggregate_v
+      template <class T> inline constexpr bool is_aggregate_v
         = is_aggregate<T>::value;                                        // C++17
-      template <class T> constexpr bool is_signed_v
+      template <class T> inline constexpr bool is_signed_v
         = is_signed<T>::value;                                           // C++17
-      template <class T> constexpr bool is_unsigned_v
+      template <class T> inline constexpr bool is_unsigned_v
         = is_unsigned<T>::value;                                         // C++17
-      template <class T, class... Args> constexpr bool is_constructible_v
+      template <class T, class... Args> inline constexpr bool is_constructible_v
         = is_constructible<T, Args...>::value;                           // C++17
-      template <class T> constexpr bool is_default_constructible_v
+      template <class T> inline constexpr bool is_default_constructible_v
         = is_default_constructible<T>::value;                            // C++17
-      template <class T> constexpr bool is_copy_constructible_v
+      template <class T> inline constexpr bool is_copy_constructible_v
         = is_copy_constructible<T>::value;                               // C++17
-      template <class T> constexpr bool is_move_constructible_v
+      template <class T> inline constexpr bool is_move_constructible_v
         = is_move_constructible<T>::value;                               // C++17
-      template <class T, class U> constexpr bool is_assignable_v
+      template <class T, class U> inline constexpr bool is_assignable_v
         = is_assignable<T, U>::value;                                    // C++17
-      template <class T> constexpr bool is_copy_assignable_v
+      template <class T> inline constexpr bool is_copy_assignable_v
         = is_copy_assignable<T>::value;                                  // C++17
-      template <class T> constexpr bool is_move_assignable_v
+      template <class T> inline constexpr bool is_move_assignable_v
         = is_move_assignable<T>::value;                                  // C++17
-      template <class T, class U> constexpr bool is_swappable_with_v
+      template <class T, class U> inline constexpr bool is_swappable_with_v
         = is_swappable_with<T, U>::value;                                // C++17
-      template <class T> constexpr bool is_swappable_v
+      template <class T> inline constexpr bool is_swappable_v
         = is_swappable<T>::value;                                        // C++17
-      template <class T> constexpr bool is_destructible_v
+      template <class T> inline constexpr bool is_destructible_v
         = is_destructible<T>::value;                                     // C++17
-      template <class T, class... Args> constexpr bool is_trivially_constructible_v
+      template <class T, class... Args> inline constexpr bool is_trivially_constructible_v
         = is_trivially_constructible<T, Args...>::value;                 // C++17
-      template <class T> constexpr bool is_trivially_default_constructible_v
+      template <class T> inline constexpr bool is_trivially_default_constructible_v
         = is_trivially_default_constructible<T>::value;                  // C++17
-      template <class T> constexpr bool is_trivially_copy_constructible_v
+      template <class T> inline constexpr bool is_trivially_copy_constructible_v
         = is_trivially_copy_constructible<T>::value;                     // C++17
-      template <class T> constexpr bool is_trivially_move_constructible_v
+      template <class T> inline constexpr bool is_trivially_move_constructible_v
         = is_trivially_move_constructible<T>::value;                     // C++17
-      template <class T, class U> constexpr bool is_trivially_assignable_v
+      template <class T, class U> inline constexpr bool is_trivially_assignable_v
         = is_trivially_assignable<T, U>::value;                          // C++17
-      template <class T> constexpr bool is_trivially_copy_assignable_v
+      template <class T> inline constexpr bool is_trivially_copy_assignable_v
         = is_trivially_copy_assignable<T>::value;                        // C++17
-      template <class T> constexpr bool is_trivially_move_assignable_v
+      template <class T> inline constexpr bool is_trivially_move_assignable_v
         = is_trivially_move_assignable<T>::value;                        // C++17
-      template <class T> constexpr bool is_trivially_destructible_v
+      template <class T> inline constexpr bool is_trivially_destructible_v
         = is_trivially_destructible<T>::value;                           // C++17
-      template <class T, class... Args> constexpr bool is_nothrow_constructible_v
+      template <class T, class... Args> inline constexpr bool is_nothrow_constructible_v
         = is_nothrow_constructible<T, Args...>::value;                   // C++17
-      template <class T> constexpr bool is_nothrow_default_constructible_v
+      template <class T> inline constexpr bool is_nothrow_default_constructible_v
         = is_nothrow_default_constructible<T>::value;                    // C++17
-      template <class T> constexpr bool is_nothrow_copy_constructible_v
+      template <class T> inline constexpr bool is_nothrow_copy_constructible_v
         = is_nothrow_copy_constructible<T>::value;                       // C++17
-      template <class T> constexpr bool is_nothrow_move_constructible_v
+      template <class T> inline constexpr bool is_nothrow_move_constructible_v
         = is_nothrow_move_constructible<T>::value;                       // C++17
-      template <class T, class U> constexpr bool is_nothrow_assignable_v
+      template <class T, class U> inline constexpr bool is_nothrow_assignable_v
         = is_nothrow_assignable<T, U>::value;                            // C++17
-      template <class T> constexpr bool is_nothrow_copy_assignable_v
+      template <class T> inline constexpr bool is_nothrow_copy_assignable_v
         = is_nothrow_copy_assignable<T>::value;                          // C++17
-      template <class T> constexpr bool is_nothrow_move_assignable_v
+      template <class T> inline constexpr bool is_nothrow_move_assignable_v
         = is_nothrow_move_assignable<T>::value;                          // C++17
-      template <class T, class U> constexpr bool is_nothrow_swappable_with_v
+      template <class T, class U> inline constexpr bool is_nothrow_swappable_with_v
         = is_nothrow_swappable_with<T, U>::value;                       // C++17
-      template <class T> constexpr bool is_nothrow_swappable_v
+      template <class T> inline constexpr bool is_nothrow_swappable_v
         = is_nothrow_swappable<T>::value;                               // C++17
-      template <class T> constexpr bool is_nothrow_destructible_v
+      template <class T> inline constexpr bool is_nothrow_destructible_v
         = is_nothrow_destructible<T>::value;                             // C++17
-      template <class T> constexpr bool has_virtual_destructor_v
+      template <class T> inline constexpr bool has_virtual_destructor_v
         = has_virtual_destructor<T>::value;                              // C++17
+      template<class T> inline constexpr bool has_unique_object_representations_v // C++17
+        = has_unique_object_representations<T>::value;
 
       // See C++14 20.10.5, type property queries
-      template <class T> constexpr size_t alignment_of_v
+      template <class T> inline constexpr size_t alignment_of_v
         = alignment_of<T>::value;                                        // C++17
-      template <class T> constexpr size_t rank_v
+      template <class T> inline constexpr size_t rank_v
         = rank<T>::value;                                                // C++17
-      template <class T, unsigned I = 0> constexpr size_t extent_v
+      template <class T, unsigned I = 0> inline constexpr size_t extent_v
         = extent<T, I>::value;                                           // C++17
 
       // See C++14 20.10.6, type relations
-      template <class T, class U> constexpr bool is_same_v
+      template <class T, class U> inline constexpr bool is_same_v
         = is_same<T, U>::value;                                          // C++17
-      template <class Base, class Derived> constexpr bool is_base_of_v
+      template <class Base, class Derived> inline constexpr bool is_base_of_v
         = is_base_of<Base, Derived>::value;                              // C++17
-      template <class From, class To> constexpr bool is_convertible_v
+      template <class From, class To> inline constexpr bool is_convertible_v
         = is_convertible<From, To>::value;                               // C++17
-      template <class Fn, class... ArgTypes> constexpr bool is_invocable_v
+      template <class Fn, class... ArgTypes> inline constexpr bool is_invocable_v
         = is_invocable<Fn, ArgTypes...>::value;                          // C++17
-      template <class R, class Fn, class... ArgTypes> constexpr bool is_invocable_r_v
+      template <class R, class Fn, class... ArgTypes> inline constexpr bool is_invocable_r_v
         = is_invocable_r<R, Fn, ArgTypes...>::value;                     // C++17
-      template <class Fn, class... ArgTypes> constexpr bool is_nothrow_invocable_v
+      template <class Fn, class... ArgTypes> inline constexpr bool is_nothrow_invocable_v
         = is_nothrow_invocable<Fn, ArgTypes...>::value;                  // C++17
-      template <class R, class Fn, class... ArgTypes> constexpr bool is_nothrow_invocable_r_v
+      template <class R, class Fn, class... ArgTypes> inline constexpr bool is_nothrow_invocable_r_v
         = is_nothrow_invocable_r<R, Fn, ArgTypes...>::value;             // C++17
 
       // [meta.logical], logical operator traits:
       template<class... B> struct conjunction;                           // C++17
       template<class... B> 
-        constexpr bool conjunction_v = conjunction<B...>::value;         // C++17
+        inline constexpr bool conjunction_v = conjunction<B...>::value;  // C++17
       template<class... B> struct disjunction;                           // C++17
       template<class... B>
-        constexpr bool disjunction_v = disjunction<B...>::value;         // C++17
+        inline constexpr bool disjunction_v = disjunction<B...>::value;  // C++17
       template<class B> struct negation;                                 // C++17
       template<class B> 
-        constexpr bool negation_v = negation<B>::value;                  // C++17
+        inline constexpr bool negation_v = negation<B>::value;           // C++17
 
 }
 
@@ -619,7 +623,8 @@ template <class _Tp> struct _LIBCPP_TEMPLATE_VIS is_co
 template <class _Tp> struct _LIBCPP_TEMPLATE_VIS is_const<_Tp const> : public true_type {};
 
 #if _LIBCPP_STD_VER > 14 && !defined(_LIBCPP_HAS_NO_VARIABLE_TEMPLATES)
-template <class _Tp> _LIBCPP_CONSTEXPR bool is_const_v
+template <class _Tp>
+_LIBCPP_INLINE_VAR _LIBCPP_CONSTEXPR bool is_const_v
     = is_const<_Tp>::value;
 #endif
 
@@ -629,7 +634,8 @@ template <class _Tp> struct _LIBCPP_TEMPLATE_VIS is_vo
 template <class _Tp> struct _LIBCPP_TEMPLATE_VIS is_volatile<_Tp volatile> : public true_type {};
 
 #if _LIBCPP_STD_VER > 14 && !defined(_LIBCPP_HAS_NO_VARIABLE_TEMPLATES)
-template <class _Tp> _LIBCPP_CONSTEXPR bool is_volatile_v
+template <class _Tp>
+_LIBCPP_INLINE_VAR _LIBCPP_CONSTEXPR bool is_volatile_v
     = is_volatile<_Tp>::value;
 #endif
 
@@ -666,7 +672,8 @@ template <class _Tp> struct _LIBCPP_TEMPLATE_VIS is_vo
     : public __libcpp_is_void<typename remove_cv<_Tp>::type> {};
 
 #if _LIBCPP_STD_VER > 14 && !defined(_LIBCPP_HAS_NO_VARIABLE_TEMPLATES)
-template <class _Tp> _LIBCPP_CONSTEXPR bool is_void_v
+template <class _Tp>
+_LIBCPP_INLINE_VAR _LIBCPP_CONSTEXPR bool is_void_v
     = is_void<_Tp>::value;
 #endif
 
@@ -683,7 +690,8 @@ template <class _Tp> struct _LIBCPP_TEMPLATE_VIS is_nu
     : public __is_nullptr_t_impl<typename remove_cv<_Tp>::type> {};
 
 #if _LIBCPP_STD_VER > 14 && !defined(_LIBCPP_HAS_NO_VARIABLE_TEMPLATES)
-template <class _Tp> _LIBCPP_CONSTEXPR bool is_null_pointer_v
+template <class _Tp>
+_LIBCPP_INLINE_VAR _LIBCPP_CONSTEXPR bool is_null_pointer_v
     = is_null_pointer<_Tp>::value;
 #endif
 #endif
@@ -717,7 +725,8 @@ template <class _Tp> struct _LIBCPP_TEMPLATE_VIS is_in
     : public __libcpp_is_integral<typename remove_cv<_Tp>::type> {};
 
 #if _LIBCPP_STD_VER > 14 && !defined(_LIBCPP_HAS_NO_VARIABLE_TEMPLATES)
-template <class _Tp> _LIBCPP_CONSTEXPR bool is_integral_v
+template <class _Tp>
+_LIBCPP_INLINE_VAR _LIBCPP_CONSTEXPR bool is_integral_v
     = is_integral<_Tp>::value;
 #endif
 
@@ -732,7 +741,8 @@ template <class _Tp> struct _LIBCPP_TEMPLATE_VIS is_fl
     : public __libcpp_is_floating_point<typename remove_cv<_Tp>::type> {};
 
 #if _LIBCPP_STD_VER > 14 && !defined(_LIBCPP_HAS_NO_VARIABLE_TEMPLATES)
-template <class _Tp> _LIBCPP_CONSTEXPR bool is_floating_point_v
+template <class _Tp>
+_LIBCPP_INLINE_VAR _LIBCPP_CONSTEXPR bool is_floating_point_v
     = is_floating_point<_Tp>::value;
 #endif
 
@@ -746,7 +756,8 @@ template <class _Tp, size_t _Np> struct _LIBCPP_TEMPLA
     : public true_type {};
 
 #if _LIBCPP_STD_VER > 14 && !defined(_LIBCPP_HAS_NO_VARIABLE_TEMPLATES)
-template <class _Tp> _LIBCPP_CONSTEXPR bool is_array_v
+template <class _Tp>
+_LIBCPP_INLINE_VAR _LIBCPP_CONSTEXPR bool is_array_v
     = is_array<_Tp>::value;
 #endif
 
@@ -759,7 +770,8 @@ template <class _Tp> struct _LIBCPP_TEMPLATE_VIS is_po
     : public __libcpp_is_pointer<typename remove_cv<_Tp>::type> {};
 
 #if _LIBCPP_STD_VER > 14 && !defined(_LIBCPP_HAS_NO_VARIABLE_TEMPLATES)
-template <class _Tp> _LIBCPP_CONSTEXPR bool is_pointer_v
+template <class _Tp>
+_LIBCPP_INLINE_VAR _LIBCPP_CONSTEXPR bool is_pointer_v
     = is_pointer<_Tp>::value;
 #endif
 
@@ -780,13 +792,16 @@ template <class _Tp> struct _LIBCPP_TEMPLATE_VIS is_re
 #endif
 
 #if _LIBCPP_STD_VER > 14 && !defined(_LIBCPP_HAS_NO_VARIABLE_TEMPLATES)
-template <class _Tp> _LIBCPP_CONSTEXPR bool is_reference_v
+template <class _Tp>
+_LIBCPP_INLINE_VAR _LIBCPP_CONSTEXPR bool is_reference_v
     = is_reference<_Tp>::value;
 
-template <class _Tp> _LIBCPP_CONSTEXPR bool is_lvalue_reference_v
+template <class _Tp>
+_LIBCPP_INLINE_VAR _LIBCPP_CONSTEXPR bool is_lvalue_reference_v
     = is_lvalue_reference<_Tp>::value;
 
-template <class _Tp> _LIBCPP_CONSTEXPR bool is_rvalue_reference_v
+template <class _Tp>
+_LIBCPP_INLINE_VAR _LIBCPP_CONSTEXPR bool is_rvalue_reference_v
     = is_rvalue_reference<_Tp>::value;
 #endif
 // is_union
@@ -805,7 +820,8 @@ template <class _Tp> struct _LIBCPP_TEMPLATE_VIS is_un
 #endif
 
 #if _LIBCPP_STD_VER > 14 && !defined(_LIBCPP_HAS_NO_VARIABLE_TEMPLATES)
-template <class _Tp> _LIBCPP_CONSTEXPR bool is_union_v
+template <class _Tp>
+_LIBCPP_INLINE_VAR _LIBCPP_CONSTEXPR bool is_union_v
     = is_union<_Tp>::value;
 #endif
 
@@ -830,7 +846,8 @@ template <class _Tp> struct _LIBCPP_TEMPLATE_VIS is_cl
 #endif
 
 #if _LIBCPP_STD_VER > 14 && !defined(_LIBCPP_HAS_NO_VARIABLE_TEMPLATES)
-template <class _Tp> _LIBCPP_CONSTEXPR bool is_class_v
+template <class _Tp>
+_LIBCPP_INLINE_VAR _LIBCPP_CONSTEXPR bool is_class_v
     = is_class<_Tp>::value;
 #endif
 
@@ -840,7 +857,8 @@ template <class _Tp, class _Up> struct _LIBCPP_TEMPLAT
 template <class _Tp>            struct _LIBCPP_TEMPLATE_VIS is_same<_Tp, _Tp> : public true_type {};
 
 #if _LIBCPP_STD_VER > 14 && !defined(_LIBCPP_HAS_NO_VARIABLE_TEMPLATES)
-template <class _Tp, class _Up> _LIBCPP_CONSTEXPR bool is_same_v
+template <class _Tp, class _Up>
+_LIBCPP_INLINE_VAR _LIBCPP_CONSTEXPR bool is_same_v
     = is_same<_Tp, _Up>::value;
 #endif
 
@@ -870,7 +888,8 @@ template <class _Tp> struct _LIBCPP_TEMPLATE_VIS is_fu
     : public __libcpp_is_function<_Tp> {};
 
 #if _LIBCPP_STD_VER > 14 && !defined(_LIBCPP_HAS_NO_VARIABLE_TEMPLATES)
-template <class _Tp> _LIBCPP_CONSTEXPR bool is_function_v
+template <class _Tp>
+_LIBCPP_INLINE_VAR _LIBCPP_CONSTEXPR bool is_function_v
     = is_function<_Tp>::value;
 #endif
 
@@ -897,7 +916,8 @@ template <class _Tp> struct _LIBCPP_TEMPLATE_VIS is_me
     : public __libcpp_is_member_function_pointer<typename remove_cv<_Tp>::type>::type {};
 
 #if _LIBCPP_STD_VER > 14 && !defined(_LIBCPP_HAS_NO_VARIABLE_TEMPLATES)
-template <class _Tp> _LIBCPP_CONSTEXPR bool is_member_function_pointer_v
+template <class _Tp>
+_LIBCPP_INLINE_VAR _LIBCPP_CONSTEXPR bool is_member_function_pointer_v
     = is_member_function_pointer<_Tp>::value;
 #endif
 
@@ -910,7 +930,8 @@ template <class _Tp> struct _LIBCPP_TEMPLATE_VIS is_me
     : public __libcpp_is_member_pointer<typename remove_cv<_Tp>::type> {};
 
 #if _LIBCPP_STD_VER > 14 && !defined(_LIBCPP_HAS_NO_VARIABLE_TEMPLATES)
-template <class _Tp> _LIBCPP_CONSTEXPR bool is_member_pointer_v
+template <class _Tp>
+_LIBCPP_INLINE_VAR _LIBCPP_CONSTEXPR bool is_member_pointer_v
     = is_member_pointer<_Tp>::value;
 #endif
 
@@ -921,7 +942,8 @@ template <class _Tp> struct _LIBCPP_TEMPLATE_VIS is_me
                                     !is_member_function_pointer<_Tp>::value> {};
 
 #if _LIBCPP_STD_VER > 14 && !defined(_LIBCPP_HAS_NO_VARIABLE_TEMPLATES)
-template <class _Tp> _LIBCPP_CONSTEXPR bool is_member_object_pointer_v
+template <class _Tp>
+_LIBCPP_INLINE_VAR _LIBCPP_CONSTEXPR bool is_member_object_pointer_v
     = is_member_object_pointer<_Tp>::value;
 #endif
 
@@ -949,7 +971,8 @@ template <class _Tp> struct _LIBCPP_TEMPLATE_VIS is_en
 #endif
 
 #if _LIBCPP_STD_VER > 14 && !defined(_LIBCPP_HAS_NO_VARIABLE_TEMPLATES)
-template <class _Tp> _LIBCPP_CONSTEXPR bool is_enum_v
+template <class _Tp>
+_LIBCPP_INLINE_VAR _LIBCPP_CONSTEXPR bool is_enum_v
     = is_enum<_Tp>::value;
 #endif
 
@@ -960,7 +983,8 @@ template <class _Tp> struct _LIBCPP_TEMPLATE_VIS is_ar
                                      is_floating_point<_Tp>::value> {};
 
 #if _LIBCPP_STD_VER > 14 && !defined(_LIBCPP_HAS_NO_VARIABLE_TEMPLATES)
-template <class _Tp> _LIBCPP_CONSTEXPR bool is_arithmetic_v
+template <class _Tp>
+_LIBCPP_INLINE_VAR _LIBCPP_CONSTEXPR bool is_arithmetic_v
     = is_arithmetic<_Tp>::value;
 #endif
 
@@ -972,7 +996,8 @@ template <class _Tp> struct _LIBCPP_TEMPLATE_VIS is_fu
                                      is_arithmetic<_Tp>::value> {};
 
 #if _LIBCPP_STD_VER > 14 && !defined(_LIBCPP_HAS_NO_VARIABLE_TEMPLATES)
-template <class _Tp> _LIBCPP_CONSTEXPR bool is_fundamental_v
+template <class _Tp>
+_LIBCPP_INLINE_VAR _LIBCPP_CONSTEXPR bool is_fundamental_v
     = is_fundamental<_Tp>::value;
 #endif
 
@@ -988,7 +1013,8 @@ template <class _Tp> struct _LIBCPP_TEMPLATE_VIS is_sc
 template <> struct _LIBCPP_TEMPLATE_VIS is_scalar<nullptr_t> : public true_type {};
 
 #if _LIBCPP_STD_VER > 14 && !defined(_LIBCPP_HAS_NO_VARIABLE_TEMPLATES)
-template <class _Tp> _LIBCPP_CONSTEXPR bool is_scalar_v
+template <class _Tp>
+_LIBCPP_INLINE_VAR _LIBCPP_CONSTEXPR bool is_scalar_v
     = is_scalar<_Tp>::value;
 #endif
 
@@ -1001,7 +1027,8 @@ template <class _Tp> struct _LIBCPP_TEMPLATE_VIS is_ob
                                      is_class<_Tp>::value  > {};
 
 #if _LIBCPP_STD_VER > 14 && !defined(_LIBCPP_HAS_NO_VARIABLE_TEMPLATES)
-template <class _Tp> _LIBCPP_CONSTEXPR bool is_object_v
+template <class _Tp>
+_LIBCPP_INLINE_VAR _LIBCPP_CONSTEXPR bool is_object_v
     = is_object<_Tp>::value;
 #endif
 
@@ -1011,7 +1038,8 @@ template <class _Tp> struct _LIBCPP_TEMPLATE_VIS is_co
     : public integral_constant<bool, !is_fundamental<_Tp>::value> {};
 
 #if _LIBCPP_STD_VER > 14 && !defined(_LIBCPP_HAS_NO_VARIABLE_TEMPLATES)
-template <class _Tp> _LIBCPP_CONSTEXPR bool is_compound_v
+template <class _Tp>
+_LIBCPP_INLINE_VAR _LIBCPP_CONSTEXPR bool is_compound_v
     = is_compound<_Tp>::value;
 #endif
 
@@ -1210,7 +1238,8 @@ template <class _Tp> struct __libcpp_is_signed<_Tp, fa
 template <class _Tp> struct _LIBCPP_TEMPLATE_VIS is_signed : public __libcpp_is_signed<_Tp> {};
 
 #if _LIBCPP_STD_VER > 14 && !defined(_LIBCPP_HAS_NO_VARIABLE_TEMPLATES)
-template <class _Tp> _LIBCPP_CONSTEXPR bool is_signed_v
+template <class _Tp>
+_LIBCPP_INLINE_VAR _LIBCPP_CONSTEXPR bool is_signed_v
     = is_signed<_Tp>::value;
 #endif
 
@@ -1230,7 +1259,8 @@ template <class _Tp> struct __libcpp_is_unsigned<_Tp, 
 template <class _Tp> struct _LIBCPP_TEMPLATE_VIS is_unsigned : public __libcpp_is_unsigned<_Tp> {};
 
 #if _LIBCPP_STD_VER > 14 && !defined(_LIBCPP_HAS_NO_VARIABLE_TEMPLATES)
-template <class _Tp> _LIBCPP_CONSTEXPR bool is_unsigned_v
+template <class _Tp>
+_LIBCPP_INLINE_VAR _LIBCPP_CONSTEXPR bool is_unsigned_v
     = is_unsigned<_Tp>::value;
 #endif
 
@@ -1244,7 +1274,8 @@ template <class _Tp, size_t _Np> struct _LIBCPP_TEMPLA
     : public integral_constant<size_t, rank<_Tp>::value + 1> {};
 
 #if _LIBCPP_STD_VER > 14 && !defined(_LIBCPP_HAS_NO_VARIABLE_TEMPLATES)
-template <class _Tp> _LIBCPP_CONSTEXPR size_t rank_v
+template <class _Tp>
+_LIBCPP_INLINE_VAR _LIBCPP_CONSTEXPR size_t rank_v
     = rank<_Tp>::value;
 #endif
 
@@ -1262,7 +1293,8 @@ template <class _Tp, size_t _Np, unsigned _Ip> struct 
     : public integral_constant<size_t, extent<_Tp, _Ip-1>::value> {};

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


More information about the svn-src-projects mailing list