Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 15 Dec 2017 18:58:21 +0000 (UTC)
From:      Dimitry Andric <dim@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r326880 - head/contrib/llvm/tools/clang/lib/Sema
Message-ID:  <201712151858.vBFIwLJ9032479@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: dim
Date: Fri Dec 15 18:58:21 2017
New Revision: 326880
URL: https://svnweb.freebsd.org/changeset/base/326880

Log:
  Pull in r320755 from upstream clang trunk (by me):
  
    Don't trigger -Wuser-defined-literals for system headers
  
    Summary:
    In D41064, I proposed adding `#pragma clang diagnostic ignored
    "-Wuser-defined-literals"` to some of libc++'s headers, since these
    warnings are now triggered by clang's new `-std=gnu++14` default:
  
    $ cat test.cpp
    #include <string>
  
    $ clang -std=c++14 -Wsystem-headers -Wall -Wextra -c test.cpp
    In file included from test.cpp:1:
    In file included from /usr/include/c++/v1/string:470:
    /usr/include/c++/v1/string_view:763:29: warning: user-defined literal suffixes not starting with '_' are reserved [-Wuser-defined-literals]
        basic_string_view<char> operator "" sv(const char *__str, size_t __len)
                                ^
    /usr/include/c++/v1/string_view:769:32: warning: user-defined literal suffixes not starting with '_' are reserved [-Wuser-defined-literals]
        basic_string_view<wchar_t> operator "" sv(const wchar_t *__str, size_t __len)
                                   ^
    /usr/include/c++/v1/string_view:775:33: warning: user-defined literal suffixes not starting with '_' are reserved [-Wuser-defined-literals]
        basic_string_view<char16_t> operator "" sv(const char16_t *__str, size_t __len)
                                    ^
    /usr/include/c++/v1/string_view:781:33: warning: user-defined literal suffixes not starting with '_' are reserved [-Wuser-defined-literals]
        basic_string_view<char32_t> operator "" sv(const char32_t *__str, size_t __len)
                                    ^
    In file included from test.cpp:1:
    /usr/include/c++/v1/string:4012:24: warning: user-defined literal suffixes not starting with '_' are reserved [-Wuser-defined-literals]
        basic_string<char> operator "" s( const char *__str, size_t __len )
                           ^
    /usr/include/c++/v1/string:4018:27: warning: user-defined literal suffixes not starting with '_' are reserved [-Wuser-defined-literals]
        basic_string<wchar_t> operator "" s( const wchar_t *__str, size_t __len )
                              ^
    /usr/include/c++/v1/string:4024:28: warning: user-defined literal suffixes not starting with '_' are reserved [-Wuser-defined-literals]
        basic_string<char16_t> operator "" s( const char16_t *__str, size_t __len )
                               ^
    /usr/include/c++/v1/string:4030:28: warning: user-defined literal suffixes not starting with '_' are reserved [-Wuser-defined-literals]
        basic_string<char32_t> operator "" s( const char32_t *__str, size_t __len )
                               ^
    8 warnings generated.
  
    Both @aaron.ballman and @mclow.lists felt that adding this workaround
    to the libc++ headers was the wrong way, and it should be fixed in
    clang instead.
  
    Here is a proposal to do just that.  I verified that this suppresses
    the warning, even when -Wsystem-headers is used, and that the warning
    is still emitted for a declaration outside of system headers.
  
    Reviewers: aaron.ballman, mclow.lists, rsmith
  
    Reviewed By: aaron.ballman
  
    Subscribers: mclow.lists, aaron.ballman, andrew, emaste, cfe-commits
  
    Differential Revision: https://reviews.llvm.org/D41080
  
  This will allow to compile some of the libc++ headers in C++14 mode
  (which is the default for gcc 6 and higher, and will be the default for
  clang 6.0.0 and higher), with -Wsystem-headers and -Werror enabled.
  
  Reported by:	andrew
  MFC after:	3 days

Modified:
  head/contrib/llvm/tools/clang/lib/Sema/SemaDeclCXX.cpp

Modified: head/contrib/llvm/tools/clang/lib/Sema/SemaDeclCXX.cpp
==============================================================================
--- head/contrib/llvm/tools/clang/lib/Sema/SemaDeclCXX.cpp	Fri Dec 15 18:56:12 2017	(r326879)
+++ head/contrib/llvm/tools/clang/lib/Sema/SemaDeclCXX.cpp	Fri Dec 15 18:58:21 2017	(r326880)
@@ -12997,7 +12997,8 @@ bool Sema::CheckLiteralOperatorDeclaration(FunctionDec
 
   StringRef LiteralName
     = FnDecl->getDeclName().getCXXLiteralIdentifier()->getName();
-  if (LiteralName[0] != '_') {
+  if (LiteralName[0] != '_' &&
+      !getSourceManager().isInSystemHeader(FnDecl->getLocation())) {
     // C++11 [usrlit.suffix]p1:
     //   Literal suffix identifiers that do not start with an underscore
     //   are reserved for future standardization.



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