Re: r307232 - [modules ts] Do not emit strong function definitions from the module interface unit in every user.

2017-07-16 Thread David Blaikie via cfe-commits
Looks good - does this support available_externally definitions of strong
external linkage functions in the users of a module? (is that tested?)
Should it?

Also should we consider having two flags for modular codegen - one for
correctness (external function definitions), one for linkage size
optimization (inline functions). Given the current data on optimized builds
with inline functions (that it hurts object size to emit
weak+available_externally definitions rather than linkonce_odr because so
many definitions are optimized away entirely, that the bytes for the weak
definition are wasted/unnecessary) - or at least something to keep in
mind/run numbers on in the future for more generic codebases than Google's
protobuf-heavy (& only protobuf modularized) code.

On Wed, Jul 5, 2017 at 5:30 PM Richard Smith via cfe-commits <
cfe-commits@lists.llvm.org> wrote:

> Author: rsmith
> Date: Wed Jul  5 17:30:00 2017
> New Revision: 307232
>
> URL: http://llvm.org/viewvc/llvm-project?rev=307232=rev
> Log:
> [modules ts] Do not emit strong function definitions from the module
> interface unit in every user.
>
> Added:
> cfe/trunk/test/CXX/modules-ts/basic/basic.def.odr/
> cfe/trunk/test/CXX/modules-ts/basic/basic.def.odr/p4/
> cfe/trunk/test/CXX/modules-ts/basic/basic.def.odr/p4/module.cpp
> cfe/trunk/test/CXX/modules-ts/basic/basic.def.odr/p4/module.cppm
> cfe/trunk/test/CXX/modules-ts/basic/basic.def.odr/p4/user.cpp
> Modified:
> cfe/trunk/lib/Serialization/ASTWriterDecl.cpp
>
> Modified: cfe/trunk/lib/Serialization/ASTWriterDecl.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serialization/ASTWriterDecl.cpp?rev=307232=307231=307232=diff
>
> ==
> --- cfe/trunk/lib/Serialization/ASTWriterDecl.cpp (original)
> +++ cfe/trunk/lib/Serialization/ASTWriterDecl.cpp Wed Jul  5 17:30:00 2017
> @@ -2233,8 +2233,18 @@ void ASTRecordWriter::AddFunctionDefinit
>Writer->ClearSwitchCaseIDs();
>
>assert(FD->doesThisDeclarationHaveABody());
> -  bool ModulesCodegen = Writer->Context->getLangOpts().ModulesCodegen &&
> -Writer->WritingModule &&
> !FD->isDependentContext();
> +  bool ModulesCodegen = false;
> +  if (Writer->WritingModule && !FD->isDependentContext()) {
> +// Under -fmodules-codegen, codegen is performed for all defined
> functions.
> +// When building a C++ Modules TS module interface unit, a strong
> definition
> +// in the module interface is provided by the compilation of that
> module
> +// interface unit, not by its users. (Inline functions are still
> emitted
> +// in module users.)
> +ModulesCodegen =
> +Writer->Context->getLangOpts().ModulesCodegen ||
> +(Writer->WritingModule->Kind == Module::ModuleInterfaceUnit &&
> + Writer->Context->GetGVALinkageForFunction(FD) ==
> GVA_StrongExternal);
> +  }
>Record->push_back(ModulesCodegen);
>if (ModulesCodegen)
>  Writer->ModularCodegenDecls.push_back(Writer->GetDeclRef(FD));
>
> Added: cfe/trunk/test/CXX/modules-ts/basic/basic.def.odr/p4/module.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CXX/modules-ts/basic/basic.def.odr/p4/module.cpp?rev=307232=auto
>
> ==
> --- cfe/trunk/test/CXX/modules-ts/basic/basic.def.odr/p4/module.cpp (added)
> +++ cfe/trunk/test/CXX/modules-ts/basic/basic.def.odr/p4/module.cpp Wed
> Jul  5 17:30:00 2017
> @@ -0,0 +1,23 @@
> +// RUN: %clang_cc1 -fmodules-ts %S/module.cppm -triple
> %itanium_abi_triple -emit-module-interface -o %t
> +// RUN: %clang_cc1 -fmodules-ts %s -triple %itanium_abi_triple
> -fmodule-file=%t -emit-llvm -o - | FileCheck %s --implicit-check-not=unused
> --implicit-check-not=global_module
> +
> +module Module;
> +
> +void use() {
> +  // CHECK: define linkonce_odr {{.*}}@_Z20used_inline_exportedv
> +  used_inline_exported();
> +  // CHECK: declare {{.*}}@_Z18noninline_exportedv
> +  noninline_exported();
> +
> +  // FIXME: This symbol should not be visible here.
> +  // CHECK: define internal {{.*}}@_ZL26used_static_module_linkagev
> +  used_static_module_linkage();
> +
> +  // FIXME: The module name should be mangled into the name of this
> function.
> +  // CHECK: define linkonce_odr {{.*}}@_Z26used_inline_module_linkagev
> +  used_inline_module_linkage();
> +
> +  // FIXME: The module name should be mangled into the name of this
> function.
> +  // CHECK: declare {{.*}}@_Z24noninline_module_linkagev
> +  noninline_module_linkage();
> +}
>
> Added: cfe/trunk/test/CXX/modules-ts/basic/basic.def.odr/p4/module.cppm
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CXX/modules-ts/basic/basic.def.odr/p4/module.cppm?rev=307232=auto
>
> ==
> --- cfe/trunk/test/CXX/modules-ts/basic/basic.def.odr/p4/module.cppm
> (added)
> +++ 

[PATCH] D35472: Implement P0463R1: "Endian just Endian"

2017-07-16 Thread Marshall Clow via Phabricator via cfe-commits
mclow.lists created this revision.

Implement the C++2a feature "A compile time endian-ness detection idiom"
Howard's suggested implementation is:

enum class endian
{
#ifdef _WIN32

little = 0,
big= 1,
native = little

#else

little = __ORDER_LITTLE_ENDIAN__,
big= __ORDER_BIG_ENDIAN__
native = __BYTE_ORDER__,

#endif
};

but libc++ has it's own macros that have done the work to detect this.

The other option would be to rip out `_LIBCPP_LITTLE_ENDIAN` and 
`_LIBCPP_BIG_ENDIAN`, which is tempting, but that would entail changes in code 
that has to compile for earlier C++ language versions.


https://reviews.llvm.org/D35472

Files:
  include/type_traits
  test/std/utilities/meta/meta.type.synop/endian.pass.cpp


Index: test/std/utilities/meta/meta.type.synop/endian.pass.cpp
===
--- test/std/utilities/meta/meta.type.synop/endian.pass.cpp
+++ test/std/utilities/meta/meta.type.synop/endian.pass.cpp
@@ -0,0 +1,46 @@
+//===--===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.TXT for details.
+//
+//===--===//
+
+// UNSUPPORTED: c++98, c++03, c++14, c++17
+
+// enum class endian;
+
+#include 
+#include 
+
+#include "test_macros.h"
+
+int main() {
+typedef std::endian E;
+static_assert(std::is_enum::value, "");
+
+// Check that E is a scoped enum by checking for conversions.
+typedef std::underlying_type::type UT;
+static_assert(!std::is_convertible::value, "");
+
+// test that the enumeration values exist
+static_assert( std::endian::little == std::endian::little );
+static_assert( std::endian::big== std::endian::big );
+static_assert( std::endian::native == std::endian::native );
+static_assert( std::endian::little != std::endian::big );
+
+//  Technically not required, but true on all existing machines
+static_assert( std::endian::native == std::endian::little || 
+   std::endian::native == std::endian::big );
+
+//  Try to check at runtime
+{
+union {
+uint32_t i;
+char c[4];
+} u = {0x01020304};
+
+assert ((u.c[0] == 1) == (std::endian::native == std::endian::big));
+}
+}
Index: include/type_traits
===
--- include/type_traits
+++ include/type_traits
@@ -4737,6 +4737,21 @@
 
 #endif
 
+#if _LIBCPP_STD_VER > 14
+enum class endian
+{
+little = 0xDEAD,
+big= 0xFACE,
+#if _LIBCPP_LITTLE_ENDIAN
+native = little
+#elif _LIBCPP_BIG_ENDIAN
+native = big
+#else
+native = 0xCAFE
+#endif
+};
+#endif
+
 _LIBCPP_END_NAMESPACE_STD
 
 #if _LIBCPP_STD_VER > 14


Index: test/std/utilities/meta/meta.type.synop/endian.pass.cpp
===
--- test/std/utilities/meta/meta.type.synop/endian.pass.cpp
+++ test/std/utilities/meta/meta.type.synop/endian.pass.cpp
@@ -0,0 +1,46 @@
+//===--===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.TXT for details.
+//
+//===--===//
+
+// UNSUPPORTED: c++98, c++03, c++14, c++17
+
+// enum class endian;
+
+#include 
+#include 
+
+#include "test_macros.h"
+
+int main() {
+typedef std::endian E;
+static_assert(std::is_enum::value, "");
+
+// Check that E is a scoped enum by checking for conversions.
+typedef std::underlying_type::type UT;
+static_assert(!std::is_convertible::value, "");
+
+// test that the enumeration values exist
+static_assert( std::endian::little == std::endian::little );
+static_assert( std::endian::big== std::endian::big );
+static_assert( std::endian::native == std::endian::native );
+static_assert( std::endian::little != std::endian::big );
+
+//  Technically not required, but true on all existing machines
+static_assert( std::endian::native == std::endian::little || 
+   std::endian::native == std::endian::big );
+
+//  Try to check at runtime
+{
+union {
+uint32_t i;
+char c[4];
+} u = {0x01020304};
+
+assert ((u.c[0] == 1) == (std::endian::native == std::endian::big));
+}
+}
Index: include/type_traits
===
--- include/type_traits
+++ include/type_traits
@@ -4737,6 +4737,21 @@
 
 #endif
 
+#if _LIBCPP_STD_VER > 14
+enum class 

[PATCH] D35159: [libcxxabi][demangler] Use an AST to represent the demangled name

2017-07-16 Thread Duncan P. N. Exon Smith via Phabricator via cfe-commits
dexonsmith added a comment.

In https://reviews.llvm.org/D35159#809724, @erik.pilkington wrote:

> Rebase. I don't think the issue of purging underscores from this file/libcxx 
> should block this, if we want to discuss that cfe-dev would probably be the 
> place. I agree that it would be nice to clang-format this file, would anyone 
> have any problems with me committing that after this? I found the git-blame 
> of this file to be pretty useless, almost every line just points to r184097. 
>  Are there any other thoughts on this change?


I suppose you may as well pick a new name for "string_ref" that doesn't have 
underscores, since it's a new type, if someone is going to follow up to drop 
underscores.  Perhaps "StringView"?


https://reviews.llvm.org/D35159



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[libcxx] r308159 - Add case for c++2a to libc++ and test macros

2017-07-16 Thread Marshall Clow via cfe-commits
Author: marshall
Date: Sun Jul 16 20:02:27 2017
New Revision: 308159

URL: http://llvm.org/viewvc/llvm-project?rev=308159=rev
Log:
Add case for c++2a to libc++ and test macros

Modified:
libcxx/trunk/include/__config
libcxx/trunk/test/support/test_macros.h

Modified: libcxx/trunk/include/__config
URL: 
http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/__config?rev=308159=308158=308159=diff
==
--- libcxx/trunk/include/__config (original)
+++ libcxx/trunk/include/__config Sun Jul 16 20:02:27 2017
@@ -920,8 +920,10 @@ template  struct __static_asse
 #define _LIBCPP_STD_VER 11
 #  elif __cplusplus <= 201402L
 #define _LIBCPP_STD_VER 14
+#  elif __cplusplus <= 201703L
+#define _LIBCPP_STD_VER 17
 #  else
-#define _LIBCPP_STD_VER 16  // current year, or date of c++17 ratification
+#define _LIBCPP_STD_VER 18  // current year, or date of c++2a ratification
 #  endif
 #endif  // _LIBCPP_STD_VER
 

Modified: libcxx/trunk/test/support/test_macros.h
URL: 
http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/support/test_macros.h?rev=308159=308158=308159=diff
==
--- libcxx/trunk/test/support/test_macros.h (original)
+++ libcxx/trunk/test/support/test_macros.h Sun Jul 16 20:02:27 2017
@@ -81,8 +81,11 @@
 # define TEST_STD_VER 11
 #elif __cplusplus <= 201402L
 # define TEST_STD_VER 14
+#elif __cplusplus <= 201703L
+# define TEST_STD_VER 17
 #else
-# define TEST_STD_VER 16// current year; greater than current standard
+# define TEST_STD_VER 99// greater than current standard
+// This is deliberately different than _LIBCPP_STD_VER to discourage matching 
them up.
 #endif
 #endif
 


___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


r308158 - Revert changes from my previous refactoring - will need to fix dependencies in clang's extra tooling (such as clang-tidy etc.).

2017-07-16 Thread Faisal Vali via cfe-commits
Author: faisalv
Date: Sun Jul 16 19:03:21 2017
New Revision: 308158

URL: http://llvm.org/viewvc/llvm-project?rev=308158=rev
Log:
Revert changes from my previous refactoring - will need to fix dependencies in 
clang's extra tooling (such as clang-tidy etc.).

Sorry about that.

Modified:
cfe/trunk/include/clang/Lex/MacroInfo.h
cfe/trunk/include/clang/Lex/Preprocessor.h
cfe/trunk/lib/CodeGen/MacroPPCallbacks.cpp
cfe/trunk/lib/Frontend/PrintPreprocessedOutput.cpp
cfe/trunk/lib/Lex/MacroArgs.cpp
cfe/trunk/lib/Lex/MacroInfo.cpp
cfe/trunk/lib/Lex/PPDirectives.cpp
cfe/trunk/lib/Lex/PPMacroExpansion.cpp
cfe/trunk/lib/Lex/TokenLexer.cpp
cfe/trunk/lib/Sema/SemaCodeComplete.cpp
cfe/trunk/lib/Serialization/ASTReader.cpp
cfe/trunk/lib/Serialization/ASTWriter.cpp
cfe/trunk/tools/libclang/CIndex.cpp
cfe/trunk/unittests/Lex/LexerTest.cpp

Modified: cfe/trunk/include/clang/Lex/MacroInfo.h
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Lex/MacroInfo.h?rev=308158=308157=308158=diff
==
--- cfe/trunk/include/clang/Lex/MacroInfo.h (original)
+++ cfe/trunk/include/clang/Lex/MacroInfo.h Sun Jul 16 19:03:21 2017
@@ -42,14 +42,14 @@ class MacroInfo {
 
   /// \brief The list of arguments for a function-like macro.
   ///
-  /// ParameterList points to the first of NumParameters pointers.
+  /// ArgumentList points to the first of NumArguments pointers.
   ///
   /// This can be empty, for, e.g. "#define X()".  In a C99-style variadic
   /// macro, this includes the \c __VA_ARGS__ identifier on the list.
-  IdentifierInfo **ParameterList;
+  IdentifierInfo **ArgumentList;
 
-  /// \see ParameterList
-  unsigned NumParameters;
+  /// \see ArgumentList
+  unsigned NumArguments;
 
   /// \brief This is the list of tokens that the macro is defined to.
   SmallVector ReplacementTokens;
@@ -153,37 +153,37 @@ public:
   /// \brief Set the value of the IsWarnIfUnused flag.
   void setIsWarnIfUnused(bool val) { IsWarnIfUnused = val; }
 
-  /// \brief Set the specified list of identifiers as the parameter list for
+  /// \brief Set the specified list of identifiers as the argument list for
   /// this macro.
-  void setParameterList(ArrayRef List,
+  void setArgumentList(ArrayRef List,
llvm::BumpPtrAllocator ) {
-assert(ParameterList == nullptr && NumParameters == 0 &&
-   "Parameter list already set!");
+assert(ArgumentList == nullptr && NumArguments == 0 &&
+   "Argument list already set!");
 if (List.empty())
   return;
 
-NumParameters = List.size();
-ParameterList = PPAllocator.Allocate(List.size());
-std::copy(List.begin(), List.end(), ParameterList);
+NumArguments = List.size();
+ArgumentList = PPAllocator.Allocate(List.size());
+std::copy(List.begin(), List.end(), ArgumentList);
   }
 
-  /// Parameters - The list of parameters for a function-like macro.  This can 
-  /// be empty, for, e.g. "#define X()".
-  typedef IdentifierInfo *const *param_iterator;
-  bool param_empty() const { return NumParameters == 0; }
-  param_iterator param_begin() const { return ParameterList; }
-  param_iterator param_end() const { return ParameterList + NumParameters; }
-  unsigned getNumParams() const { return NumParameters; }
-  ArrayRef params() const {
-return ArrayRef(ParameterList, NumParameters);
+  /// Arguments - The list of arguments for a function-like macro.  This can be
+  /// empty, for, e.g. "#define X()".
+  typedef IdentifierInfo *const *arg_iterator;
+  bool arg_empty() const { return NumArguments == 0; }
+  arg_iterator arg_begin() const { return ArgumentList; }
+  arg_iterator arg_end() const { return ArgumentList + NumArguments; }
+  unsigned getNumArgs() const { return NumArguments; }
+  ArrayRef args() const {
+return ArrayRef(ArgumentList, NumArguments);
   }
 
-  /// \brief Return the parameter number of the specified identifier,
-  /// or -1 if the identifier is not a formal parameter identifier.
-  int getParameterNum(const IdentifierInfo *Arg) const {
-for (param_iterator I = param_begin(), E = param_end(); I != E; ++I)
+  /// \brief Return the argument number of the specified identifier,
+  /// or -1 if the identifier is not a formal argument identifier.
+  int getArgumentNum(const IdentifierInfo *Arg) const {
+for (arg_iterator I = arg_begin(), E = arg_end(); I != E; ++I)
   if (*I == Arg)
-return I - param_begin();
+return I - arg_begin();
 return -1;
   }
 

Modified: cfe/trunk/include/clang/Lex/Preprocessor.h
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Lex/Preprocessor.h?rev=308158=308157=308158=diff
==
--- cfe/trunk/include/clang/Lex/Preprocessor.h (original)
+++ cfe/trunk/include/clang/Lex/Preprocessor.h Sun Jul 16 19:03:21 2017
@@ -1813,24 

[PATCH] D35470: [libcxx] Implement pointer_traits::to_address as in P0653R0

2017-07-16 Thread Glen Fernandes via Phabricator via cfe-commits
glenjofe created this revision.
glenjofe created this object with edit policy "No One".

A tiny patch that implements P0653R0 (or D0653R1 which revises the former with 
only a small editorial change after LEWG review).


Repository:
  rL LLVM

https://reviews.llvm.org/D35470

Files:
  include/memory
  
test/std/utilities/memory/pointer.traits/pointer.traits.functions/to_address.pass.cpp
  test/std/utilities/memory/pointer.traits/to_address.pass.cpp

Index: test/std/utilities/memory/pointer.traits/to_address.pass.cpp
===
--- test/std/utilities/memory/pointer.traits/to_address.pass.cpp
+++ test/std/utilities/memory/pointer.traits/to_address.pass.cpp
@@ -0,0 +1,23 @@
+//===--===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.TXT for details.
+//
+//===--===//
+
+// 
+
+// element_type* pointer_traits::to_address(pointer p) noexcept;
+
+#include 
+#include 
+
+int main()
+{
+int i = 0;
+assert(std::pointer_traits::to_address() == );
+assert(std::pointer_traits::to_address() == );
+assert(std::pointer_traits::to_address() == );
+}
Index: test/std/utilities/memory/pointer.traits/pointer.traits.functions/to_address.pass.cpp
===
--- test/std/utilities/memory/pointer.traits/pointer.traits.functions/to_address.pass.cpp
+++ test/std/utilities/memory/pointer.traits/pointer.traits.functions/to_address.pass.cpp
@@ -0,0 +1,40 @@
+//===--===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.TXT for details.
+//
+//===--===//
+
+// 
+
+// element_type* pointer_traits::to_address(pointer p) noexcept;
+
+#include 
+#include 
+
+struct P1
+{
+  typedef int element_type;
+  int* value;
+  explicit P1(int* ptr) noexcept : value(ptr) { }
+  int* operator->() const noexcept { return value; }
+};
+
+struct P2
+{
+  typedef P1::element_type element_type;
+  P1 value;
+  explicit P2(P1 ptr) noexcept : value(ptr) { }
+  P1 operator->() const noexcept { return value; }
+};
+
+int main()
+{
+int i = 0;
+P1 p1();
+assert(std::pointer_traits::to_address(p1) == );
+P2 p2(p1);
+assert(std::pointer_traits::to_address(p2) == );
+}
Index: include/memory
===
--- include/memory
+++ include/memory
@@ -32,6 +32,7 @@
 template  using rebind = ;
 
 static pointer pointer_to();
+static element_type* to_address(pointer p) noexcept;
 };
 
 template 
@@ -44,6 +45,7 @@
 template  using rebind = U*;
 
 static pointer pointer_to() noexcept;
+static element_type* to_address(pointer p) noexcept;
 };
 
 template 
@@ -950,11 +952,20 @@
 
 private:
 struct __nat {};
+
+template 
+_LIBCPP_INLINE_VISIBILITY
+static element_type* __to_address(_Tp __p) _NOEXCEPT
+{return pointer_traits<_Tp>::to_address(__p);}
 public:
 _LIBCPP_INLINE_VISIBILITY
 static pointer pointer_to(typename conditional::type& __r)
 {return pointer::pointer_to(__r);}
+
+_LIBCPP_INLINE_VISIBILITY
+static element_type* to_address(pointer __p) _NOEXCEPT
+{return __to_address(__p.operator->());}
 };
 
 template 
@@ -977,6 +988,9 @@
 static pointer pointer_to(typename conditional::type& __r) _NOEXCEPT
 {return _VSTD::addressof(__r);}
+
+_LIBCPP_INLINE_VISIBILITY
+static element_type* to_address(pointer __p) _NOEXCEPT {return __p;}
 };
 
 template 
@@ -1089,20 +1103,12 @@
 #endif
 };
 
-template 
-inline _LIBCPP_INLINE_VISIBILITY
-_Tp*
-__to_raw_pointer(_Tp* __p) _NOEXCEPT
-{
-return __p;
-}
-
 template 
 inline _LIBCPP_INLINE_VISIBILITY
 typename pointer_traits<_Pointer>::element_type*
 __to_raw_pointer(_Pointer __p) _NOEXCEPT
 {
-return _VSTD::__to_raw_pointer(__p.operator->());
+return pointer_traits<_Pointer>::to_address(__p);
 }
 
 template 
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


r308157 - [NFC] Refactor the Preprocessor function that handles Macro definitions and rename Arguments to Parameters in Macro Definitions.

2017-07-16 Thread Faisal Vali via cfe-commits
Author: faisalv
Date: Sun Jul 16 18:27:53 2017
New Revision: 308157

URL: http://llvm.org/viewvc/llvm-project?rev=308157=rev
Log:
[NFC] Refactor the Preprocessor function that handles Macro definitions and 
rename Arguments to Parameters in Macro Definitions. 
  - Extracted the reading of the tokens out into a separate function.
  - Replace 'Argument' with 'Parameter' when referring to the identifiers of 
the macro definition (as opposed to the supplied arguments - MacroArgs - during 
the macro invocation).

This is in preparation for submitting patches for review to implement 
__VA_OPT__ which will otherwise just keep lengthening the HandleDefineDirective 
function and making it less comprehensible.


Thanks!

Modified:
cfe/trunk/include/clang/Lex/MacroInfo.h
cfe/trunk/include/clang/Lex/Preprocessor.h
cfe/trunk/lib/CodeGen/MacroPPCallbacks.cpp
cfe/trunk/lib/Frontend/PrintPreprocessedOutput.cpp
cfe/trunk/lib/Lex/MacroArgs.cpp
cfe/trunk/lib/Lex/MacroInfo.cpp
cfe/trunk/lib/Lex/PPDirectives.cpp
cfe/trunk/lib/Lex/PPMacroExpansion.cpp
cfe/trunk/lib/Lex/TokenLexer.cpp
cfe/trunk/lib/Sema/SemaCodeComplete.cpp
cfe/trunk/lib/Serialization/ASTReader.cpp
cfe/trunk/lib/Serialization/ASTWriter.cpp
cfe/trunk/tools/libclang/CIndex.cpp
cfe/trunk/unittests/Lex/LexerTest.cpp

Modified: cfe/trunk/include/clang/Lex/MacroInfo.h
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Lex/MacroInfo.h?rev=308157=308156=308157=diff
==
--- cfe/trunk/include/clang/Lex/MacroInfo.h (original)
+++ cfe/trunk/include/clang/Lex/MacroInfo.h Sun Jul 16 18:27:53 2017
@@ -42,14 +42,14 @@ class MacroInfo {
 
   /// \brief The list of arguments for a function-like macro.
   ///
-  /// ArgumentList points to the first of NumArguments pointers.
+  /// ParameterList points to the first of NumParameters pointers.
   ///
   /// This can be empty, for, e.g. "#define X()".  In a C99-style variadic
   /// macro, this includes the \c __VA_ARGS__ identifier on the list.
-  IdentifierInfo **ArgumentList;
+  IdentifierInfo **ParameterList;
 
-  /// \see ArgumentList
-  unsigned NumArguments;
+  /// \see ParameterList
+  unsigned NumParameters;
 
   /// \brief This is the list of tokens that the macro is defined to.
   SmallVector ReplacementTokens;
@@ -153,37 +153,37 @@ public:
   /// \brief Set the value of the IsWarnIfUnused flag.
   void setIsWarnIfUnused(bool val) { IsWarnIfUnused = val; }
 
-  /// \brief Set the specified list of identifiers as the argument list for
+  /// \brief Set the specified list of identifiers as the parameter list for
   /// this macro.
-  void setArgumentList(ArrayRef List,
+  void setParameterList(ArrayRef List,
llvm::BumpPtrAllocator ) {
-assert(ArgumentList == nullptr && NumArguments == 0 &&
-   "Argument list already set!");
+assert(ParameterList == nullptr && NumParameters == 0 &&
+   "Parameter list already set!");
 if (List.empty())
   return;
 
-NumArguments = List.size();
-ArgumentList = PPAllocator.Allocate(List.size());
-std::copy(List.begin(), List.end(), ArgumentList);
+NumParameters = List.size();
+ParameterList = PPAllocator.Allocate(List.size());
+std::copy(List.begin(), List.end(), ParameterList);
   }
 
-  /// Arguments - The list of arguments for a function-like macro.  This can be
-  /// empty, for, e.g. "#define X()".
-  typedef IdentifierInfo *const *arg_iterator;
-  bool arg_empty() const { return NumArguments == 0; }
-  arg_iterator arg_begin() const { return ArgumentList; }
-  arg_iterator arg_end() const { return ArgumentList + NumArguments; }
-  unsigned getNumArgs() const { return NumArguments; }
-  ArrayRef args() const {
-return ArrayRef(ArgumentList, NumArguments);
+  /// Parameters - The list of parameters for a function-like macro.  This can 
+  /// be empty, for, e.g. "#define X()".
+  typedef IdentifierInfo *const *param_iterator;
+  bool param_empty() const { return NumParameters == 0; }
+  param_iterator param_begin() const { return ParameterList; }
+  param_iterator param_end() const { return ParameterList + NumParameters; }
+  unsigned getNumParams() const { return NumParameters; }
+  ArrayRef params() const {
+return ArrayRef(ParameterList, NumParameters);
   }
 
-  /// \brief Return the argument number of the specified identifier,
-  /// or -1 if the identifier is not a formal argument identifier.
-  int getArgumentNum(const IdentifierInfo *Arg) const {
-for (arg_iterator I = arg_begin(), E = arg_end(); I != E; ++I)
+  /// \brief Return the parameter number of the specified identifier,
+  /// or -1 if the identifier is not a formal parameter identifier.
+  int getParameterNum(const IdentifierInfo *Arg) const {
+for (param_iterator I = param_begin(), E = param_end(); I != E; ++I)
   if (*I == Arg)
-return I - arg_begin();
+

r308156 - Enable TLS support on OpenBSD.

2017-07-16 Thread Brad Smith via cfe-commits
Author: brad
Date: Sun Jul 16 18:06:46 2017
New Revision: 308156

URL: http://llvm.org/viewvc/llvm-project?rev=308156=rev
Log:
Enable TLS support on OpenBSD.

Modified:
cfe/trunk/test/Sema/tls.c

Modified: cfe/trunk/test/Sema/tls.c
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/tls.c?rev=308156=308155=308156=diff
==
--- cfe/trunk/test/Sema/tls.c (original)
+++ cfe/trunk/test/Sema/tls.c Sun Jul 16 18:06:46 2017
@@ -12,9 +12,9 @@
 // RUN: %clang_cc1 -triple x86_64-pc-win32 -fsyntax-only %s
 // RUN: %clang_cc1 -triple i386-pc-win32 -fsyntax-only %s
 
-// OpenBSD does not suppport TLS.
-// RUN: not %clang_cc1 -triple x86_64-pc-openbsd -fsyntax-only %s
-// RUN: not %clang_cc1 -triple i386-pc-openbsd -fsyntax-only %s
+// OpenBSD suppports TLS.
+// RUN: %clang_cc1 -triple x86_64-pc-openbsd -fsyntax-only %s
+// RUN: %clang_cc1 -triple i386-pc-openbsd -fsyntax-only %s
 
 // Haiku does not suppport TLS.
 // RUN: not %clang_cc1 -triple i586-pc-haiku -fsyntax-only %s


___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


r308155 - Enable TLS support on OpenBSD, but default to the emulatated TLS model.

2017-07-16 Thread Brad Smith via cfe-commits
Author: brad
Date: Sun Jul 16 17:49:31 2017
New Revision: 308155

URL: http://llvm.org/viewvc/llvm-project?rev=308155=rev
Log:
Enable TLS support on OpenBSD, but default to the emulatated TLS model.

Modified:
cfe/trunk/lib/Basic/Targets.cpp
cfe/trunk/lib/Driver/ToolChains/Clang.cpp
cfe/trunk/test/Driver/emulated-tls.cpp

Modified: cfe/trunk/lib/Basic/Targets.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/Targets.cpp?rev=308155=308154=308155=diff
==
--- cfe/trunk/lib/Basic/Targets.cpp (original)
+++ cfe/trunk/lib/Basic/Targets.cpp Sun Jul 16 17:49:31 2017
@@ -571,8 +571,6 @@ protected:
 public:
   OpenBSDTargetInfo(const llvm::Triple , const TargetOptions )
   : OSTargetInfo(Triple, Opts) {
-this->TLSSupported = false;
-
   switch (Triple.getArch()) {
 case llvm::Triple::x86:
 case llvm::Triple::x86_64:

Modified: cfe/trunk/lib/Driver/ToolChains/Clang.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains/Clang.cpp?rev=308155=308154=308155=diff
==
--- cfe/trunk/lib/Driver/ToolChains/Clang.cpp (original)
+++ cfe/trunk/lib/Driver/ToolChains/Clang.cpp Sun Jul 16 17:49:31 2017
@@ -3201,9 +3201,10 @@ void Clang::ConstructJob(Compilation ,
   Args.AddLastArg(CmdArgs, options::OPT_femit_all_decls);
   Args.AddLastArg(CmdArgs, options::OPT_fheinous_gnu_extensions);
   Args.AddLastArg(CmdArgs, options::OPT_fno_operator_names);
-  // Emulated TLS is enabled by default on Android, and can be enabled manually
-  // with -femulated-tls.
-  bool EmulatedTLSDefault = Triple.isAndroid() || 
Triple.isWindowsCygwinEnvironment();
+  // Emulated TLS is enabled by default on Android and OpenBSD, and can be 
enabled
+  // manually with -femulated-tls.
+  bool EmulatedTLSDefault = Triple.isAndroid() || Triple.isOSOpenBSD() ||
+Triple.isWindowsCygwinEnvironment();
   if (Args.hasFlag(options::OPT_femulated_tls, options::OPT_fno_emulated_tls,
EmulatedTLSDefault))
 CmdArgs.push_back("-femulated-tls");

Modified: cfe/trunk/test/Driver/emulated-tls.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/emulated-tls.cpp?rev=308155=308154=308155=diff
==
--- cfe/trunk/test/Driver/emulated-tls.cpp (original)
+++ cfe/trunk/test/Driver/emulated-tls.cpp Sun Jul 16 17:49:31 2017
@@ -1,5 +1,7 @@
-// Cygwin uses emutls. Clang should pass -femulated-tls to cc1 and cc1 should 
pass EmulatedTLS to LLVM CodeGen.
+// Cygwin and OpenBSD use emutls. Clang should pass -femulated-tls to cc1
+// and cc1 should pass EmulatedTLS to LLVM CodeGen.
 // FIXME: Add more targets here to use emutls.
 // RUN: %clang -### -std=c++11 -target i686-pc-cygwin %s 2>&1 | FileCheck %s
+// RUN: %clang -### -std=c++11 -target i686-pc-openbsd %s 2>&1 | FileCheck %s
 
 // CHECK: "-cc1" {{.*}}"-femulated-tls"


___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[libcxx] r308153 - Update libc++ status pages with results of the Toronto Meeting - and for C++2a

2017-07-16 Thread Marshall Clow via cfe-commits
Author: marshall
Date: Sun Jul 16 16:59:23 2017
New Revision: 308153

URL: http://llvm.org/viewvc/llvm-project?rev=308153=rev
Log:
Update libc++ status pages with results of the Toronto Meeting - and for C++2a

Added:
libcxx/trunk/www/cxx2a_status.html
Modified:
libcxx/trunk/www/cxx1z_status.html
libcxx/trunk/www/index.html

Modified: libcxx/trunk/www/cxx1z_status.html
URL: 
http://llvm.org/viewvc/llvm-project/libcxx/trunk/www/cxx1z_status.html?rev=308153=308152=308153=diff
==
--- libcxx/trunk/www/cxx1z_status.html (original)
+++ libcxx/trunk/www/cxx1z_status.html Sun Jul 16 16:59:23 2017
@@ -161,6 +161,9 @@
http://wg21.link/P0607R0;>P0607R0LWGInline 
Variables for the Standard LibraryKona
http://wg21.link/P0618R0;>P0618R0LWGDeprecating 
codecvtKona
http://wg21.link/P0623R0;>P0623R0LWGFinal C++17 
Parallel Algorithms FixesKona
+   
+   http://wg21.link/P0682R1;>P0682R1LWGRepairing 
elementary string conversionsToronto
+   http://wg21.link/P0739R0;>P0739R0LWGSome 
improvements to class template argument deduction integration into the standard 
libraryToronto
 
 
   
@@ -483,6 +486,11 @@
http://wg21.link/LWG2911;>2911An 
is_aggregate type trait is neededKonaComplete
http://wg21.link/LWG2921;>2921packaged_task and type-erased 
allocatorsKona
http://wg21.link/LWG2934;>2934optionalconst T 
doesn't compare with TKonaComplete
+   
+   http://wg21.link/LWG2901;>2901Variants 
cannot properly support allocatorsTorontoComplete
+   http://wg21.link/LWG2955;>2955to_chars / from_chars 
depend on std::stringTorontoResolved by https://wg21.link/P0682R1;>P0682R1
+   http://wg21.link/LWG2956;>2956filesystem::canonical()
 still defined in terms of absolute(p, 
base)TorontoComplete
+
 

Added: libcxx/trunk/www/cxx2a_status.html
URL: 
http://llvm.org/viewvc/llvm-project/libcxx/trunk/www/cxx2a_status.html?rev=308153=auto
==
--- libcxx/trunk/www/cxx2a_status.html (added)
+++ libcxx/trunk/www/cxx2a_status.html Sun Jul 16 16:59:23 2017
@@ -0,0 +1,90 @@
+http://www.w3.org/TR/html4/strict.dtd;>
+
+
+
+  
+  libc++ C++2a Status
+  
+  
+
+
+
+
+  
+http://llvm.org/;>LLVM Home
+  
+
+  
+libc++ Info
+About
+  
+
+  
+Quick Links
+http://lists.llvm.org/mailman/listinfo/cfe-dev;>cfe-dev
+http://lists.llvm.org/mailman/listinfo/cfe-commits;>cfe-commits
+https://bugs.llvm.org/;>Bug Reports
+http://llvm.org/svn/llvm-project/libcxx/trunk/;>Browse SVN
+http://llvm.org/viewvc/llvm-project/libcxx/trunk/;>Browse 
ViewVC
+  
+
+
+
+  
+  libc++ C++2a Status
+  
+
+  In July 2017, the C++ standard committee created a draft for the next 
version of the C++ standard, known here as "C++2a" (probably to be C++20).
+  This page shows the status of libc++; the status of clang's support of 
the language features is http://clang.llvm.org/cxx_status.html#cxx2a;>here.
+
+  The groups that have contributed papers:
+  
+LWG - Library working group
+CWG - Core Language Working group
+SG1 - Study group #1 (Concurrency working group)
+  
+  
+
+  Paper Status
+  
+   Paper #GroupPaper 
NameMeetingStatusFirst released version
+
+   https://wg21.link/P0463R1;>P0463R1LWGEndian just 
EndianToronto
+   https://wg21.link/P0674R1;>P0674R1LWGExtending 
make_shared to Support ArraysToronto
+
+
+  
+
+[ Note: "Nothing to do" means that no library changes were needed to 
implement this change -- end note]
+
+  Library Working group Issues Status
+
+  
+   Issue #Issue 
NameMeetingStatus
+
+   http://wg21.link/LWG2070;>2070allocate_shared 
should use 
allocator_traitsA::constructTorontoResolved 
by https://wg21.link/P0674R1;>P0674R1
+   http://wg21.link/LWG2444;>2444Inconsistent complexity for 
std::sort_heapToronto
+   http://wg21.link/LWG2593;>2593Moved-from 
state of AllocatorsToronto
+   http://wg21.link/LWG2597;>2597std::log misspecified 
for complex numbersToronto
+   http://wg21.link/LWG2783;>2783stack::emplace() and 
queue::emplace() should return 
decltype(auto)Toronto
+   http://wg21.link/LWG2932;>2932Constraints 
on parallel algorithm implementations are 
underspecifiedToronto
+   http://wg21.link/LWG2937;>2937Is 
equivalent("existing_thing", "not_existing_thing") an 
errorTorontoComplete
+   http://wg21.link/LWG2940;>2940result_of 
specification also needs a little cleanupToronto
+   http://wg21.link/LWG2942;>2942LWG 2873's 
resolution missed 
weak_ptr::owner_beforeToronto
+   http://wg21.link/LWG2954;>2954Specialization of the 
convenience variable templates should be 
prohibitedToronto
+   http://wg21.link/LWG2961;>2961Bad 
postcondition for 
set_default_resourceToronto
+   http://wg21.link/LWG2966;>2966Incomplete 
resolution of US 74TorontoNothing to do
+   http://wg21.link/LWG2974;>2974Diagnose 
out of 

Re: r308044 - Add documentation for @available

2017-07-16 Thread Nico Weber via cfe-commits
Aaron, https://clang.llvm.org/docs/AttributeReference.html#availability
still doesn't have the AttrDocs.td change I made in this change 2 days ago.
Do I have to do anything to get it to update?

On Fri, Jul 14, 2017 at 2:40 PM, Nico Weber via cfe-commits <
cfe-commits@lists.llvm.org> wrote:

> Author: nico
> Date: Fri Jul 14 11:40:52 2017
> New Revision: 308044
>
> URL: http://llvm.org/viewvc/llvm-project?rev=308044=rev
> Log:
> Add documentation for @available
>
> https://reviews.llvm.org/D35379
>
> Modified:
> cfe/trunk/docs/LanguageExtensions.rst
> cfe/trunk/include/clang/Basic/AttrDocs.td
>
> Modified: cfe/trunk/docs/LanguageExtensions.rst
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/docs/
> LanguageExtensions.rst?rev=308044=308043=308044=diff
> 
> ==
> --- cfe/trunk/docs/LanguageExtensions.rst (original)
> +++ cfe/trunk/docs/LanguageExtensions.rst Fri Jul 14 11:40:52 2017
> @@ -1271,6 +1271,87 @@ Further examples of these attributes are
>  Query for these features with ``__has_attribute(ns_consumed)``,
>  ``__has_attribute(ns_returns_retained)``, etc.
>
> +Objective-C @available
> +--
> +
> +It is possible to use the newest SDK but still build a program that can
> run on
> +older versions of macOS and iOS by passing ``-mmacosx-version-info=`` /
> +``--miphoneos-version-min=``.
> +
> +Before LLVM 5.0, when calling a function that exists only in the OS that's
> +newer than the target OS (as determined by the minimum deployment
> version),
> +programmers had to carefully check if the function exists at runtime,
> using
> +null checks for weakly-linked C functions, ``+class`` for Objective-C
> classes,
> +and ``-respondsToSelector:`` or ``+instancesRespondToSelector:`` for
> +Objective-C methods.  If such a check was missed, the program would
> compile
> +fine, run fine on newer systems, but crash on older systems.
> +
> +As of LLVM 5.0, ``-Wunguarded-availability`` uses the `availability
> attributes
> +`_
> together
> +with the new ``@available()`` keyword to assist with this issue.
> +When a method that's introduced in the OS newer than the target OS is
> called, a
> +-Wunguarded-availability warning is emitted if that call is not guarded:
> +
> +.. code-block:: objc
> +
> +  void my_fun(NSSomeClass* var) {
> +// If fancyNewMethod was added in e.g. macOS 10.12, but the code is
> +// built with -mmacosx-version-min=10.11, then this unconditional call
> +// will emit a -Wunguarded-availability warning:
> +[var fancyNewMethod];
> +  }
> +
> +To fix the warning and to avoid the crash on macOS 10.11, wrap it in
> +``if(@available())``:
> +
> +.. code-block:: objc
> +
> +  void my_fun(NSSomeClass* var) {
> +if (@available(macOS 10.12, *)) {
> +  [var fancyNewMethod];
> +} else {
> +  // Put fallback behavior for old macOS versions (and for non-mac
> +  // platforms) here.
> +}
> +  }
> +
> +The ``*`` is required and means that platforms not explicitly listed will
> take
> +the true branch, and the compiler will emit ``-Wunguarded-availability``
> +warnings for unlisted platforms based on those platform's deployment
> target.
> +More than one platform can be listed in ``@available()``:
> +
> +.. code-block:: objc
> +
> +  void my_fun(NSSomeClass* var) {
> +if (@available(macOS 10.12, iOS 10, *)) {
> +  [var fancyNewMethod];
> +}
> +  }
> +
> +If the caller of ``my_fun()`` already checks that ``my_fun()`` is only
> called
> +on 10.12, then add an `availability attribute
> +`_ to
> it,
> +which will also suppress the warning and require that calls to my_fun()
> are
> +checked:
> +
> +.. code-block:: objc
> +
> +  API_AVAILABLE(macos(10.12)) void my_fun(NSSomeClass* var) {
> +[var fancyNewMethod];  // Now ok.
> +  }
> +
> +``@available()`` is only available in Objective-C code.  To use the
> feature
> +in C and C++ code, use the ``__builtin_available()`` spelling instead.
> +
> +If existing code uses null checks or ``-respondsToSelector:``, it should
> +be changed to use ``@available()`` (or ``__builtin_available``) instead.
> +
> +``-Wunguarded-availability`` is disabled by default, but
> +``-Wunguarded-availability-new``, which only emits this warning for APIs
> +that have been introduced in macOS >= 10.13, iOS >= 11, watchOS >= 4 and
> +tvOS >= 11, is enabled by default.
> +
> +.. _langext-overloading:
>
>  Objective-C++ ABI: protocol-qualifier mangling of parameters
>  
> @@ -1287,8 +1368,6 @@ parameters of protocol-qualified type.
>  Query the presence of this new mangling with
>  ``__has_feature(objc_protocol_qualifier_mangling)``.
>
> -.. _langext-overloading:
> -
>  Initializer lists for complex numbers in C
>  

[PATCH] D35465: [clang] Remove redundant check-prefix=CHECK from tests. NFC.

2017-07-16 Thread Mandeep Singh Grang via Phabricator via cfe-commits
mgrang created this revision.
Herald added a subscriber: javed.absar.

https://reviews.llvm.org/D35465

Files:
  test/CodeGen/aarch64-type-sizes.c
  test/CodeGen/aarch64-varargs-ms.c
  test/CodeGenCXX/implicit-exception-spec.cpp
  test/Index/complete-available.m
  test/Misc/ast-dump-decl.c
  test/Misc/ast-dump-decl.cpp
  test/OpenMP/distribute_parallel_for_if_codegen.cpp
  test/OpenMP/parallel_if_codegen.cpp


Index: test/OpenMP/parallel_if_codegen.cpp
===
--- test/OpenMP/parallel_if_codegen.cpp
+++ test/OpenMP/parallel_if_codegen.cpp
@@ -1,6 +1,6 @@
 // RUN: %clang_cc1 -verify -fopenmp -fopenmp-version=45 -x c++ -triple 
%itanium_abi_triple -emit-llvm %s -o - | FileCheck %s
 // RUN: %clang_cc1 -fopenmp -fopenmp-version=45 -x c++ -std=c++11 -triple 
%itanium_abi_triple -emit-pch -o %t %s
-// RUN: %clang_cc1 -fopenmp -fopenmp-version=45 -x c++ -triple 
%itanium_abi_triple -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | 
FileCheck --check-prefix=CHECK %s
+// RUN: %clang_cc1 -fopenmp -fopenmp-version=45 -x c++ -triple 
%itanium_abi_triple -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | 
FileCheck %s
 // expected-no-diagnostics
 #ifndef HEADER
 #define HEADER
Index: test/OpenMP/distribute_parallel_for_if_codegen.cpp
===
--- test/OpenMP/distribute_parallel_for_if_codegen.cpp
+++ test/OpenMP/distribute_parallel_for_if_codegen.cpp
@@ -1,6 +1,6 @@
 // RUN: %clang_cc1 -verify -fopenmp -fopenmp-version=45 
-fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple %itanium_abi_triple 
-emit-llvm %s -o - | FileCheck %s
 // RUN: %clang_cc1 -fopenmp -fopenmp-version=45 
-fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -std=c++11 -triple 
%itanium_abi_triple -emit-pch -o %t %s
-// RUN: %clang_cc1 -fopenmp -fopenmp-version=45 
-fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple %itanium_abi_triple 
-std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck 
--check-prefix=CHECK %s
+// RUN: %clang_cc1 -fopenmp -fopenmp-version=45 
-fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple %itanium_abi_triple 
-std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck %s
 // expected-no-diagnostics
 #ifndef HEADER
 #define HEADER
Index: test/Misc/ast-dump-decl.cpp
===
--- test/Misc/ast-dump-decl.cpp
+++ test/Misc/ast-dump-decl.cpp
@@ -1,4 +1,4 @@
-// RUN: %clang_cc1 -std=c++11 -triple x86_64-linux-gnu -fms-extensions 
-ast-dump -ast-dump-filter Test %s | FileCheck -check-prefix CHECK 
-strict-whitespace %s
+// RUN: %clang_cc1 -std=c++11 -triple x86_64-linux-gnu -fms-extensions 
-ast-dump -ast-dump-filter Test %s | FileCheck -strict-whitespace %s
 
 class testEnumDecl {
   enum class TestEnumDeclScoped;
Index: test/Misc/ast-dump-decl.c
===
--- test/Misc/ast-dump-decl.c
+++ test/Misc/ast-dump-decl.c
@@ -1,4 +1,4 @@
-// RUN: %clang_cc1 -triple x86_64-unknown-unknown -ast-dump -ast-dump-filter 
Test %s | FileCheck -check-prefix CHECK -strict-whitespace %s
+// RUN: %clang_cc1 -triple x86_64-unknown-unknown -ast-dump -ast-dump-filter 
Test %s | FileCheck -strict-whitespace %s
 // RUN: %clang_cc1 -triple x86_64-unknown-unknown -ast-dump %s | FileCheck 
-check-prefix CHECK-TU -strict-whitespace %s
 // RUN: %clang_cc1 -fmodules -fmodules-local-submodule-visibility 
-fmodule-name=X -triple x86_64-unknown-unknown 
-fmodule-map-file=%S/Inputs/module.modulemap -ast-dump -ast-dump-filter Test %s 
-DMODULES | FileCheck -check-prefix CHECK -check-prefix CHECK-MODULES 
-strict-whitespace %s
 
Index: test/Index/complete-available.m
===
--- test/Index/complete-available.m
+++ test/Index/complete-available.m
@@ -8,8 +8,8 @@
   }
 }
 
-// RUN: c-index-test -code-completion-at=%s:4:18 %s | FileCheck 
-check-prefix=CHECK %s
-// RUN: c-index-test -code-completion-at=%s:7:27 %s | FileCheck 
-check-prefix=CHECK %s
+// RUN: c-index-test -code-completion-at=%s:4:18 %s | FileCheck %s
+// RUN: c-index-test -code-completion-at=%s:7:27 %s | FileCheck %s
 // CHECK: {TypedText iOS} (40)
 // CHECK: {TypedText iOSApplicationExtension} (40)
 // CHECK: {TypedText macOS} (40)
Index: test/CodeGenCXX/implicit-exception-spec.cpp
===
--- test/CodeGenCXX/implicit-exception-spec.cpp
+++ test/CodeGenCXX/implicit-exception-spec.cpp
@@ -1,4 +1,4 @@
-// RUN: %clang_cc1 %s -triple=x86_64-linux-gnu -emit-llvm -std=c++11 -o - 
-fcxx-exceptions -fexceptions | FileCheck -check-prefix=CHECK %s
+// RUN: %clang_cc1 %s -triple=x86_64-linux-gnu -emit-llvm -std=c++11 -o - 
-fcxx-exceptions -fexceptions | FileCheck %s
 
 struct A {
   A();
Index: test/CodeGen/aarch64-varargs-ms.c
===
--- 

Re: r308099 - [cxx_status] Add approved Toronto WG21 motions.

2017-07-16 Thread Richard Smith via cfe-commits
On 16 July 2017 at 05:49, Nico Weber via cfe-commits <
cfe-commits@lists.llvm.org> wrote:

> On Jul 15, 2017 11:43 AM, "Richard Smith via cfe-commits" <
> cfe-commits@lists.llvm.org> wrote:
>
> Author: rsmith
> Date: Sat Jul 15 08:42:36 2017
> New Revision: 308099
>
> URL: http://llvm.org/viewvc/llvm-project?rev=308099=rev
> Log:
> [cxx_status] Add approved Toronto WG21 motions.
>
> Modified:
> cfe/trunk/www/cxx_status.html
>
> Modified: cfe/trunk/www/cxx_status.html
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/www/cxx_status
> .html?rev=308099=308098=308099=diff
> 
> ==
> --- cfe/trunk/www/cxx_status.html (original)
> +++ cfe/trunk/www/cxx_status.html Sat Jul 15 08:42:36 2017
> @@ -2,7 +2,7 @@
>  
>  
>
> -  Clang - C++1z, C++14, C++11 and C++98 Status
> +  Clang - C++17, C++14, C++11 and C++98 Status
>
>
>

[PATCH] D34859: [COFF, ARM64] Set the data type widths and the data layout string for COFF ARM64

2017-07-16 Thread Mandeep Singh Grang via Phabricator via cfe-commits
mgrang updated this revision to Diff 106811.
mgrang added a comment.
Herald added a subscriber: javed.absar.

Fixed typo.
Added size for long double.
Added test cases.


https://reviews.llvm.org/D34859

Files:
  lib/Basic/Targets.cpp
  test/CodeGen/coff-aarch64-type-sizes.c

Index: test/CodeGen/coff-aarch64-type-sizes.c
===
--- /dev/null
+++ test/CodeGen/coff-aarch64-type-sizes.c
@@ -0,0 +1,88 @@
+// RUN: %clang_cc1 -triple aarch64-windows -emit-llvm -w -o - %s | FileCheck %s
+
+// CHECK: target datalayout = "e-m:w-p:64:64-i32:32-i64:64-i128:128-n32:64-S128"
+// CHECK: target triple = "aarch64--windows-msvc"
+
+int check_short() {
+  return sizeof(short);
+// CHECK: ret i32 2
+}
+
+int check_int() {
+  return sizeof(int);
+// CHECK: ret i32 4
+}
+
+int check_long() {
+  return sizeof(long);
+// CHECK: ret i32 4
+}
+
+int check_longlong() {
+  return sizeof(long long);
+// CHECK: ret i32 8
+}
+
+int check_int128() {
+  return sizeof(__int128);
+// CHECK: ret i32 16
+}
+
+int check_fp16() {
+  return sizeof(__fp16);
+// CHECK: ret i32 2
+}
+
+int check_float() {
+  return sizeof(float);
+// CHECK: ret i32 4
+}
+
+int check_double() {
+  return sizeof(double);
+// CHECK: ret i32 8
+}
+
+int check_longdouble() {
+  return sizeof(long double);
+// CHECK: ret i32 8
+}
+
+int check_floatComplex() {
+  return sizeof(float _Complex);
+// CHECK: ret i32 8
+}
+
+int check_doubleComplex() {
+  return sizeof(double _Complex);
+// CHECK: ret i32 16
+}
+
+int check_longdoubleComplex() {
+  return sizeof(long double _Complex);
+// CHECK: ret i32 16
+}
+
+int check_bool() {
+  return sizeof(_Bool);
+// CHECK: ret i32 1
+}
+
+int check_wchar() {
+  return sizeof(__WCHAR_TYPE__);
+// CHECK: ret i32 2
+}
+
+int check_wchar_unsigned() {
+  return (__WCHAR_TYPE__)-1 > (__WCHAR_TYPE__)0;
+// CHECK: ret i32 1
+}
+
+enum Small {
+  Item
+};
+
+int foo() {
+  return sizeof(enum Small);
+// CHECK: ret i32 4
+}
Index: lib/Basic/Targets.cpp
===
--- lib/Basic/Targets.cpp
+++ lib/Basic/Targets.cpp
@@ -6652,13 +6652,25 @@
   MicrosoftARM64TargetInfo(const llvm::Triple ,
  const TargetOptions )
   : WindowsTargetInfo(Triple, Opts), Triple(Triple) {
+
+// This is an LLP64 platform.
+// int:4, long:4, long long:8, long double:8.
 WCharType = UnsignedShort;
+IntWidth = IntAlign = 32;
+LongWidth = LongAlign = 32;
+DoubleAlign = LongLongAlign = 64;
+LongDoubleWidth = LongDoubleAlign = 64;
+IntMaxType = SignedLongLong;
+Int64Type = SignedLongLong;
 SizeType = UnsignedLongLong;
+PtrDiffType = SignedLongLong;
+IntPtrType = SignedLongLong;
+
 TheCXXABI.set(TargetCXXABI::Microsoft);
   }
 
   void setDataLayout() override {
-resetDataLayout("e-m:w-i64:64-i128:128-n32:64-S128");
+resetDataLayout("e-m:w-p:64:64-i32:32-i64:64-i128:128-n32:64-S128");
   }
 
   void getVisualStudioDefines(const LangOptions ,
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D35462: Also add the option -no-pie (like -nopie)

2017-07-16 Thread Joerg Sonnenberger via Phabricator via cfe-commits
joerg accepted this revision.
joerg added a comment.
This revision is now accepted and ready to land.

Please mark it as alias for -nopie, otherwise fine.


https://reviews.llvm.org/D35462



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D35462: Also add the option -no-pie (like -nopie)

2017-07-16 Thread Sylvestre Ledru via Phabricator via cfe-commits
sylvestre.ledru created this revision.

For example, this option is expected by ghc (haskell compiler). Currently, 
building with ghc will fail with:

  clang: error: unknown argument: '-no-pie'
  `gcc' failed in phase `Linker'. (Exit code: 1)
  . /usr/share/haskell-devscripts/Dh_Haskell.sh && \
  configure_recipe

This won't do anything (but won't fail with an error)


https://reviews.llvm.org/D35462

Files:
  docs/ClangCommandLineReference.rst
  include/clang/Driver/Options.td
  test/Driver/pic.c


Index: test/Driver/pic.c
===
--- test/Driver/pic.c
+++ test/Driver/pic.c
@@ -30,6 +30,7 @@
 // CHECK-PIE-LD: "crtendS.o" "crtn.o"
 //
 // CHECK-NOPIE-LD: "-nopie"
+// CHECK-NOPIE-LD: "-no-pie"
 //
 // CHECK-DYNAMIC-NO-PIC-32: "-mrelocation-model" "dynamic-no-pic"
 // CHECK-DYNAMIC-NO-PIC-32-NOT: "-pic-level"
Index: include/clang/Driver/Options.td
===
--- include/clang/Driver/Options.td
+++ include/clang/Driver/Options.td
@@ -2119,6 +2119,7 @@
 def nolibc : Flag<["-"], "nolibc">;
 def nomultidefs : Flag<["-"], "nomultidefs">;
 def nopie : Flag<["-"], "nopie">;
+def no_pie : Flag<["-"], "no-pie">;
 def noprebind : Flag<["-"], "noprebind">;
 def noseglinkedit : Flag<["-"], "noseglinkedit">;
 def nostartfiles : Flag<["-"], "nostartfiles">;
Index: docs/ClangCommandLineReference.rst
===
--- docs/ClangCommandLineReference.rst
+++ docs/ClangCommandLineReference.rst
@@ -294,6 +294,8 @@
 
 .. option:: -nopie
 
+.. option:: -no-pie
+
 .. option:: -noprebind
 
 .. option:: -noseglinkedit


Index: test/Driver/pic.c
===
--- test/Driver/pic.c
+++ test/Driver/pic.c
@@ -30,6 +30,7 @@
 // CHECK-PIE-LD: "crtendS.o" "crtn.o"
 //
 // CHECK-NOPIE-LD: "-nopie"
+// CHECK-NOPIE-LD: "-no-pie"
 //
 // CHECK-DYNAMIC-NO-PIC-32: "-mrelocation-model" "dynamic-no-pic"
 // CHECK-DYNAMIC-NO-PIC-32-NOT: "-pic-level"
Index: include/clang/Driver/Options.td
===
--- include/clang/Driver/Options.td
+++ include/clang/Driver/Options.td
@@ -2119,6 +2119,7 @@
 def nolibc : Flag<["-"], "nolibc">;
 def nomultidefs : Flag<["-"], "nomultidefs">;
 def nopie : Flag<["-"], "nopie">;
+def no_pie : Flag<["-"], "no-pie">;
 def noprebind : Flag<["-"], "noprebind">;
 def noseglinkedit : Flag<["-"], "noseglinkedit">;
 def nostartfiles : Flag<["-"], "nostartfiles">;
Index: docs/ClangCommandLineReference.rst
===
--- docs/ClangCommandLineReference.rst
+++ docs/ClangCommandLineReference.rst
@@ -294,6 +294,8 @@
 
 .. option:: -nopie
 
+.. option:: -no-pie
+
 .. option:: -noprebind
 
 .. option:: -noseglinkedit
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D35447: [Bash-autocompletion] Add support for -W and -Wno

2017-07-16 Thread Yuka Takahashi via Phabricator via cfe-commits
This revision was automatically updated to reflect the committed changes.
Closed by commit rL308139: [Bash-autocompletion] Add support for -W 
and -Wno (authored by yamaguchi).

Changed prior to commit:
  https://reviews.llvm.org/D35447?vs=106774=106805#toc

Repository:
  rL LLVM

https://reviews.llvm.org/D35447

Files:
  cfe/trunk/include/clang/Basic/DiagnosticIDs.h
  cfe/trunk/lib/Basic/DiagnosticIDs.cpp
  cfe/trunk/lib/Driver/Driver.cpp
  cfe/trunk/test/Driver/autocomplete.c


Index: cfe/trunk/lib/Driver/Driver.cpp
===
--- cfe/trunk/lib/Driver/Driver.cpp
+++ cfe/trunk/lib/Driver/Driver.cpp
@@ -1275,6 +1275,13 @@
   // we were requested to print out all option names that start with 
"-foo".
   // For example, "--autocomplete=-fsyn" is expanded to "-fsyntax-only".
   SuggestedCompletions = Opts->findByPrefix(PassedFlags, DisableFlags);
+
+  // We have to query the -W flags manually as they're not in the OptTable.
+  // TODO: Find a good way to add them to OptTable instead and them remove
+  // this code.
+  for (StringRef S : DiagnosticIDs::getDiagnosticFlags())
+if (S.startswith(PassedFlags))
+  SuggestedCompletions.push_back(S);
 } else {
   // If the flag is in the form of "--autocomplete=foo,bar", we were
   // requested to print out all option values for "-foo" that start with
Index: cfe/trunk/lib/Basic/DiagnosticIDs.cpp
===
--- cfe/trunk/lib/Basic/DiagnosticIDs.cpp
+++ cfe/trunk/lib/Basic/DiagnosticIDs.cpp
@@ -510,6 +510,18 @@
   return StringRef();
 }
 
+std::vector DiagnosticIDs::getDiagnosticFlags() {
+  std::vector Res;
+  for (size_t I = 1; DiagGroupNames[I] != '\0';) {
+std::string Diag(DiagGroupNames + I + 1, DiagGroupNames[I]);
+I += DiagGroupNames[I] + 1;
+Res.push_back("-W" + Diag);
+Res.push_back("-Wno" + Diag);
+  }
+
+  return Res;
+}
+
 /// Return \c true if any diagnostics were found in this group, even if they
 /// were filtered out due to having the wrong flavor.
 static bool getDiagnosticsInGroup(diag::Flavor Flavor,
Index: cfe/trunk/include/clang/Basic/DiagnosticIDs.h
===
--- cfe/trunk/include/clang/Basic/DiagnosticIDs.h
+++ cfe/trunk/include/clang/Basic/DiagnosticIDs.h
@@ -18,6 +18,7 @@
 #include "clang/Basic/LLVM.h"
 #include "llvm/ADT/IntrusiveRefCntPtr.h"
 #include "llvm/ADT/StringRef.h"
+#include 
 
 namespace clang {
   class DiagnosticsEngine;
@@ -263,6 +264,13 @@
   /// are not SFINAE errors.
   static SFINAEResponse getDiagnosticSFINAEResponse(unsigned DiagID);
 
+  /// \brief Get the string of all diagnostic flags.
+  ///
+  /// \returns A list of all diagnostics flags as they would be written in a
+  /// command line invocation including their `no-` variants. For example:
+  /// `{"-Wempty-body", "-Wno-empty-body", ...}`
+  static std::vector getDiagnosticFlags();
+
   /// \brief Get the set of all diagnostic IDs in the group with the given 
name.
   ///
   /// \param[out] Diags - On return, the diagnostics in the group.
Index: cfe/trunk/test/Driver/autocomplete.c
===
--- cfe/trunk/test/Driver/autocomplete.c
+++ cfe/trunk/test/Driver/autocomplete.c
@@ -40,3 +40,7 @@
 // MRELOCMODEL_CLANG-NOT: -mrelocation-model
 // RUN: %clang --autocomplete=#-mrelocation-mode | FileCheck %s 
-check-prefix=MRELOCMODEL_CC1
 // MRELOCMODEL_CC1: -mrelocation-model
+// RUN: %clang --autocomplete=-Wma | FileCheck %s -check-prefix=WARNING
+// WARNING: -Wmacro-redefined -Wmain -Wmain-return-type 
-Wmalformed-warning-check -Wmany-braces-around-scalar-init -Wmax-unsigned-zero
+// RUN: %clang --autocomplete=-Wnoinvalid-pp- | FileCheck %s 
-check-prefix=NOWARNING
+// NOWARNING: -Wnoinvalid-pp-token


Index: cfe/trunk/lib/Driver/Driver.cpp
===
--- cfe/trunk/lib/Driver/Driver.cpp
+++ cfe/trunk/lib/Driver/Driver.cpp
@@ -1275,6 +1275,13 @@
   // we were requested to print out all option names that start with "-foo".
   // For example, "--autocomplete=-fsyn" is expanded to "-fsyntax-only".
   SuggestedCompletions = Opts->findByPrefix(PassedFlags, DisableFlags);
+
+  // We have to query the -W flags manually as they're not in the OptTable.
+  // TODO: Find a good way to add them to OptTable instead and them remove
+  // this code.
+  for (StringRef S : DiagnosticIDs::getDiagnosticFlags())
+if (S.startswith(PassedFlags))
+  SuggestedCompletions.push_back(S);
 } else {
   // If the flag is in the form of "--autocomplete=foo,bar", we were
   // requested to print out all option values for "-foo" that start with
Index: cfe/trunk/lib/Basic/DiagnosticIDs.cpp
===
--- cfe/trunk/lib/Basic/DiagnosticIDs.cpp

r308139 - [Bash-autocompletion] Add support for -W and -Wno

2017-07-16 Thread Yuka Takahashi via cfe-commits
Author: yamaguchi
Date: Sun Jul 16 08:07:20 2017
New Revision: 308139

URL: http://llvm.org/viewvc/llvm-project?rev=308139=rev
Log:
[Bash-autocompletion] Add support for -W and -Wno

Summary:
`-W[tab]` will autocomplete warnings defined in this link:
https://clang.llvm.org/docs/DiagnosticsReference.html#wweak-vtables

Differential Revision: https://reviews.llvm.org/D35447

Modified:
cfe/trunk/include/clang/Basic/DiagnosticIDs.h
cfe/trunk/lib/Basic/DiagnosticIDs.cpp
cfe/trunk/lib/Driver/Driver.cpp
cfe/trunk/test/Driver/autocomplete.c

Modified: cfe/trunk/include/clang/Basic/DiagnosticIDs.h
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticIDs.h?rev=308139=308138=308139=diff
==
--- cfe/trunk/include/clang/Basic/DiagnosticIDs.h (original)
+++ cfe/trunk/include/clang/Basic/DiagnosticIDs.h Sun Jul 16 08:07:20 2017
@@ -18,6 +18,7 @@
 #include "clang/Basic/LLVM.h"
 #include "llvm/ADT/IntrusiveRefCntPtr.h"
 #include "llvm/ADT/StringRef.h"
+#include 
 
 namespace clang {
   class DiagnosticsEngine;
@@ -263,6 +264,13 @@ public:
   /// are not SFINAE errors.
   static SFINAEResponse getDiagnosticSFINAEResponse(unsigned DiagID);
 
+  /// \brief Get the string of all diagnostic flags.
+  ///
+  /// \returns A list of all diagnostics flags as they would be written in a
+  /// command line invocation including their `no-` variants. For example:
+  /// `{"-Wempty-body", "-Wno-empty-body", ...}`
+  static std::vector getDiagnosticFlags();
+
   /// \brief Get the set of all diagnostic IDs in the group with the given 
name.
   ///
   /// \param[out] Diags - On return, the diagnostics in the group.

Modified: cfe/trunk/lib/Basic/DiagnosticIDs.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/DiagnosticIDs.cpp?rev=308139=308138=308139=diff
==
--- cfe/trunk/lib/Basic/DiagnosticIDs.cpp (original)
+++ cfe/trunk/lib/Basic/DiagnosticIDs.cpp Sun Jul 16 08:07:20 2017
@@ -510,6 +510,18 @@ StringRef DiagnosticIDs::getWarningOptio
   return StringRef();
 }
 
+std::vector DiagnosticIDs::getDiagnosticFlags() {
+  std::vector Res;
+  for (size_t I = 1; DiagGroupNames[I] != '\0';) {
+std::string Diag(DiagGroupNames + I + 1, DiagGroupNames[I]);
+I += DiagGroupNames[I] + 1;
+Res.push_back("-W" + Diag);
+Res.push_back("-Wno" + Diag);
+  }
+
+  return Res;
+}
+
 /// Return \c true if any diagnostics were found in this group, even if they
 /// were filtered out due to having the wrong flavor.
 static bool getDiagnosticsInGroup(diag::Flavor Flavor,

Modified: cfe/trunk/lib/Driver/Driver.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Driver.cpp?rev=308139=308138=308139=diff
==
--- cfe/trunk/lib/Driver/Driver.cpp (original)
+++ cfe/trunk/lib/Driver/Driver.cpp Sun Jul 16 08:07:20 2017
@@ -1275,6 +1275,13 @@ bool Driver::HandleImmediateArgs(const C
   // we were requested to print out all option names that start with 
"-foo".
   // For example, "--autocomplete=-fsyn" is expanded to "-fsyntax-only".
   SuggestedCompletions = Opts->findByPrefix(PassedFlags, DisableFlags);
+
+  // We have to query the -W flags manually as they're not in the OptTable.
+  // TODO: Find a good way to add them to OptTable instead and them remove
+  // this code.
+  for (StringRef S : DiagnosticIDs::getDiagnosticFlags())
+if (S.startswith(PassedFlags))
+  SuggestedCompletions.push_back(S);
 } else {
   // If the flag is in the form of "--autocomplete=foo,bar", we were
   // requested to print out all option values for "-foo" that start with

Modified: cfe/trunk/test/Driver/autocomplete.c
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/autocomplete.c?rev=308139=308138=308139=diff
==
--- cfe/trunk/test/Driver/autocomplete.c (original)
+++ cfe/trunk/test/Driver/autocomplete.c Sun Jul 16 08:07:20 2017
@@ -40,3 +40,7 @@
 // MRELOCMODEL_CLANG-NOT: -mrelocation-model
 // RUN: %clang --autocomplete=#-mrelocation-mode | FileCheck %s 
-check-prefix=MRELOCMODEL_CC1
 // MRELOCMODEL_CC1: -mrelocation-model
+// RUN: %clang --autocomplete=-Wma | FileCheck %s -check-prefix=WARNING
+// WARNING: -Wmacro-redefined -Wmain -Wmain-return-type 
-Wmalformed-warning-check -Wmany-braces-around-scalar-init -Wmax-unsigned-zero
+// RUN: %clang --autocomplete=-Wnoinvalid-pp- | FileCheck %s 
-check-prefix=NOWARNING
+// NOWARNING: -Wnoinvalid-pp-token


___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


Re: r308099 - [cxx_status] Add approved Toronto WG21 motions.

2017-07-16 Thread Nico Weber via cfe-commits
On Jul 15, 2017 11:43 AM, "Richard Smith via cfe-commits" <
cfe-commits@lists.llvm.org> wrote:

Author: rsmith
Date: Sat Jul 15 08:42:36 2017
New Revision: 308099

URL: http://llvm.org/viewvc/llvm-project?rev=308099=rev
Log:
[cxx_status] Add approved Toronto WG21 motions.

Modified:
cfe/trunk/www/cxx_status.html

Modified: cfe/trunk/www/cxx_status.html
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/www/cxx_
status.html?rev=308099=308098=308099=diff

==
--- cfe/trunk/www/cxx_status.html (original)
+++ cfe/trunk/www/cxx_status.html Sat Jul 15 08:42:36 2017
@@ -2,7 +2,7 @@
 
 
   
-  Clang - C++1z, C++14, C++11 and C++98 Status
+  Clang - C++17, C++14, C++11 and C++98 Status