r364102 - Fix __has_cpp_attribute expansion to produce trailing L and (where

Reid Kleckner via cfe-commits cfe-commits at lists.llvm.org
Fri Jun 21 15:29:37 PDT 2019


I added -P to remove the line markers which were introducing the colons.

On Fri, Jun 21, 2019 at 2:58 PM Galina Kistanova via cfe-commits <
cfe-commits at lists.llvm.org> wrote:

> Hello Richard,
>
> This commit added broken test to the builder:
>
> http://lab.llvm.org:8011/builders/llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast/builds/26522
> . . .
> Failing Tests (2):
>     Clang :: Preprocessor/has_attribute.cpp
>      . . .
>
> Please have a look?
> The builder was already red and did not send notifications.
>
> Thanks
>
> Galina
>
> On Fri, Jun 21, 2019 at 1:20 PM Richard Smith via cfe-commits <
> cfe-commits at lists.llvm.org> wrote:
>
>> Author: rsmith
>> Date: Fri Jun 21 13:20:21 2019
>> New Revision: 364102
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=364102&view=rev
>> Log:
>> Fix __has_cpp_attribute expansion to produce trailing L and (where
>> necessary) leading whitespace.
>>
>> Simplify unit test and extend to cover no_unique_address attribute.
>>
>> Modified:
>>     cfe/trunk/lib/Lex/PPMacroExpansion.cpp
>>     cfe/trunk/test/Preprocessor/has_attribute.cpp
>>
>> Modified: cfe/trunk/lib/Lex/PPMacroExpansion.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Lex/PPMacroExpansion.cpp?rev=364102&r1=364101&r2=364102&view=diff
>>
>> ==============================================================================
>> --- cfe/trunk/lib/Lex/PPMacroExpansion.cpp (original)
>> +++ cfe/trunk/lib/Lex/PPMacroExpansion.cpp Fri Jun 21 13:20:21 2019
>> @@ -1330,9 +1330,13 @@ already_lexed:
>>
>>          // The last ')' has been reached; return the value if one found
>> or
>>          // a diagnostic and a dummy value.
>> -        if (Result.hasValue())
>> +        if (Result.hasValue()) {
>>            OS << Result.getValue();
>> -        else {
>> +          // For strict conformance to __has_cpp_attribute rules, use 'L'
>> +          // suffix for dated literals.
>> +          if (Result.getValue() > 1)
>> +            OS << 'L';
>> +        } else {
>>            OS << 0;
>>            if (!SuppressDiagnostic)
>>              PP.Diag(Tok.getLocation(),
>> diag::err_too_few_args_in_macro_invoc);
>> @@ -1454,6 +1458,8 @@ void Preprocessor::ExpandBuiltinMacro(To
>>    // Set up the return result.
>>    Tok.setIdentifierInfo(nullptr);
>>    Tok.clearFlag(Token::NeedsCleaning);
>> +  bool IsAtStartOfLine = Tok.isAtStartOfLine();
>> +  bool HasLeadingSpace = Tok.hasLeadingSpace();
>>
>>    if (II == Ident__LINE__) {
>>      // C99 6.10.8: "__LINE__: The presumed line number (within the
>> current
>> @@ -1807,6 +1813,8 @@ void Preprocessor::ExpandBuiltinMacro(To
>>      llvm_unreachable("Unknown identifier!");
>>    }
>>    CreateString(OS.str(), Tok, Tok.getLocation(), Tok.getLocation());
>> +  Tok.setFlagValue(Token::StartOfLine, IsAtStartOfLine);
>> +  Tok.setFlagValue(Token::LeadingSpace, HasLeadingSpace);
>>  }
>>
>>  void Preprocessor::markMacroAsUsed(MacroInfo *MI) {
>>
>> Modified: cfe/trunk/test/Preprocessor/has_attribute.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Preprocessor/has_attribute.cpp?rev=364102&r1=364101&r2=364102&view=diff
>>
>> ==============================================================================
>> --- cfe/trunk/test/Preprocessor/has_attribute.cpp (original)
>> +++ cfe/trunk/test/Preprocessor/has_attribute.cpp Fri Jun 21 13:20:21 2019
>> @@ -1,98 +1,80 @@
>> -// RUN: %clang_cc1 -triple i386-unknown-unknown -fms-compatibility
>> -std=c++11 -E %s -o - | FileCheck %s
>> +// RUN: %clang_cc1 -triple i386-unknown-unknown -fms-compatibility
>> -std=c++11 -E %s -o - | FileCheck %s --check-prefixes=CHECK,ITANIUM
>> --implicit-check-not=:
>> +// RUN: %clang_cc1 -triple i386-windows -fms-compatibility -std=c++11 -E
>> %s -o - | FileCheck %s --check-prefixes=CHECK,WINDOWS --implicit-check-not=:
>>
>> -// CHECK: has_cxx11_carries_dep
>> -#if __has_cpp_attribute(carries_dependency)
>> -  int has_cxx11_carries_dep();
>> -#endif
>> -
>> -// CHECK: has_clang_fallthrough_1
>> -#if __has_cpp_attribute(clang::fallthrough)
>> -  int has_clang_fallthrough_1();
>> -#endif
>> -
>> -// CHECK: does_not_have_selectany
>> -#if !__has_cpp_attribute(selectany)
>> -  int does_not_have_selectany();
>> -#endif
>> +#define CXX11(x) x: __has_cpp_attribute(x)
>> +
>> +// CHECK: clang::fallthrough: 201603L
>> +CXX11(clang::fallthrough)
>> +
>> +// CHECK: selectany: 0
>> +CXX11(selectany)
>>
>>  // The attribute name can be bracketed with double underscores.
>> -// CHECK: has_clang_fallthrough_2
>> -#if __has_cpp_attribute(clang::__fallthrough__)
>> -  int has_clang_fallthrough_2();
>> -#endif
>> +// CHECK: clang::__fallthrough__: 201603L
>> +CXX11(clang::__fallthrough__)
>>
>>  // The scope cannot be bracketed with double underscores unless it is
>>  // for gnu or clang.
>> -// CHECK: does_not_have___gsl___suppress
>> -#if !__has_cpp_attribute(__gsl__::suppress)
>> -  int does_not_have___gsl___suppress();
>> -#endif
>> +// CHECK: __gsl__::suppress: 0
>> +CXX11(__gsl__::suppress)
>>
>>  // We do somewhat support the __clang__ vendor namespace, but it is a
>>  // predefined macro and thus we encourage users to use _Clang instead.
>>  // Because of this, we do not support __has_cpp_attribute for that
>>  // vendor namespace.
>> -// CHECK: does_not_have___clang___fallthrough
>> -#if !__has_cpp_attribute(__clang__::fallthrough)
>> -  int does_not_have___clang___fallthrough();
>> -#endif
>> -
>> -// CHECK: does_have_Clang_fallthrough
>> -#if __has_cpp_attribute(_Clang::fallthrough)
>> -  int does_have_Clang_fallthrough();
>> -#endif
>> -
>> -// CHECK: has_gnu_const
>> -#if __has_cpp_attribute(__gnu__::__const__)
>> -  int has_gnu_const();
>> -#endif
>> -
>> -// Test that C++11, target-specific attributes behave properly.
>> -
>> -// CHECK: does_not_have_mips16
>> -#if !__has_cpp_attribute(gnu::mips16)
>> -  int does_not_have_mips16();
>> -#endif
>> -
>> -// Test that the version numbers of attributes listed in SD-6 are
>> supported
>> -// correctly.
>> -
>> -// CHECK: has_cxx11_carries_dep_vers
>> -#if __has_cpp_attribute(carries_dependency) == 200809
>> -  int has_cxx11_carries_dep_vers();
>> -#endif
>> -
>> -// CHECK: has_cxx11_noreturn_vers
>> -#if __has_cpp_attribute(noreturn) == 200809
>> -  int has_cxx11_noreturn_vers();
>> -#endif
>> -
>> -// CHECK: has_cxx14_deprecated_vers
>> -#if __has_cpp_attribute(deprecated) == 201309
>> -  int has_cxx14_deprecated_vers();
>> -#endif
>> -
>> -// CHECK: has_cxx1z_nodiscard
>> -#if __has_cpp_attribute(nodiscard) == 201603
>> -  int has_cxx1z_nodiscard();
>> -#endif
>> -
>> -// CHECK: has_cxx1z_fallthrough
>> -#if __has_cpp_attribute(fallthrough) == 201603
>> -  int has_cxx1z_fallthrough();
>> -#endif
>> -
>> -// CHECK: has_declspec_uuid
>> -#if __has_declspec_attribute(uuid)
>> -  int has_declspec_uuid();
>> -#endif
>> -
>> -// CHECK: has_declspec_uuid2
>> -#if __has_declspec_attribute(__uuid__)
>> -  int has_declspec_uuid2();
>> -#endif
>> -
>> -// CHECK: does_not_have_declspec_fallthrough
>> -#if !__has_declspec_attribute(fallthrough)
>> -  int does_not_have_declspec_fallthrough();
>> -#endif
>> +//
>> +// Note, we can't use CXX11 here because it will expand __clang__ to 1
>> +// too early.
>> +// CHECK: 1::fallthrough: 0
>> +__clang__::fallthrough: __has_cpp_attribute(__clang__::fallthrough)
>> +
>> +// CHECK: _Clang::fallthrough: 201603L
>> +CXX11(_Clang::fallthrough)
>> +
>> +// CHECK: __gnu__::__const__: 1
>> +CXX11(__gnu__::__const__)
>> +
>> +// Test that C++11, target-specific attributes behave properly.
>> +
>> +// CHECK: gnu::mips16: 0
>> +CXX11(gnu::mips16)
>> +
>> +// Test for standard attributes as listed in C++2a [cpp.cond] paragraph
>> 6.
>> +
>> +CXX11(assert)
>> +CXX11(carries_dependency)
>> +CXX11(deprecated)
>> +CXX11(ensures)
>> +CXX11(expects)
>> +CXX11(fallthrough)
>> +CXX11(likely)
>> +CXX11(maybe_unused)
>> +CXX11(no_unique_address)
>> +CXX11(nodiscard)
>> +CXX11(noreturn)
>> +CXX11(unlikely)
>> +// FIXME(201806L) CHECK: assert: 0
>> +// CHECK: carries_dependency: 200809L
>> +// CHECK: deprecated: 201309L
>> +// FIXME(201806L) CHECK: ensures: 0
>> +// FIXME(201806L) CHECK: expects: 0
>> +// CHECK: fallthrough: 201603L
>> +// FIXME(201803L) CHECK: likely: 0
>> +// CHECK: maybe_unused: 201603L
>> +// ITANIUM: no_unique_address: 201803L
>> +// WINDOWS: no_unique_address: 0
>> +// CHECK: nodiscard: 201603L
>> +// CHECK: noreturn: 200809L
>> +// FIXME(201803L) CHECK: unlikely: 0
>> +
>> +// Test for Microsoft __declspec attributes
>> +
>> +#define DECLSPEC(x) x: __has_declspec_attribute(x)
>> +
>> +// CHECK: uuid: 1
>> +// CHECK: __uuid__: 1
>> +DECLSPEC(uuid)
>> +DECLSPEC(__uuid__)
>> +
>> +// CHECK: fallthrough: 0
>> +DECLSPEC(fallthrough)
>>
>>
>> _______________________________________________
>> cfe-commits mailing list
>> cfe-commits at lists.llvm.org
>> https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20190621/39f17c4e/attachment-0001.html>


More information about the cfe-commits mailing list