[PATCH] D27651: [clang-format] Even with AlignConsecutiveDeclarations, PointerAlignment: Right should keep *s and &s to the right
KP created this revision. KP added a reviewer: djasper. KP added a subscriber: cfe-commits. Herald added a subscriber: klimek. With AlignConsecutiveDeclarations and PointerAlignment: Right *s and &s were left dangling. For instance const char* const* v1; float const* v2; SomeVeryLongType const& v3; was formatted as const char *const * v1; float const * v2; SomeVeryLongType const &v3; This patch keep the *s or &s aligned to the right, next to their variable. The above example is now formatted as const char *const *v1; float const*v2; SomeVeryLongType const &v3; https://reviews.llvm.org/D27651 Files: lib/Format/WhitespaceManager.cpp unittests/Format/FormatTest.cpp Index: unittests/Format/FormatTest.cpp === --- unittests/Format/FormatTest.cpp +++ unittests/Format/FormatTest.cpp @@ -9445,7 +9445,7 @@ Alignment); EXPECT_EQ("void SomeFunction(int parameter = 0) {\n" " int const i = 1;\n" -" int * j = 2;\n" +" int *j = 2;\n" " int big = 1;\n" "\n" " unsigned oneTwoThree = 123;\n" @@ -9466,6 +9466,29 @@ "int ll=1;\n" "}", Alignment)); + EXPECT_EQ("void SomeFunction(int parameter = 0) {\n" +" int const i = 1;\n" +" int **j = 2, ***k = 3;\n" +" int big = 1;\n" +"\n" +" unsigned oneTwoThree = 123;\n" +" int oneTwo = 12;\n" +" method();\n" +" float k = 2;\n" +" int ll = 1;\n" +"}", +format("void SomeFunction(int parameter= 0) {\n" + " int const i= 1;\n" + " int **j=2,***k=3;\n" + " int big = 1;\n" + "\n" + "unsigned oneTwoThree =123;\n" + "int oneTwo = 12;\n" + " method();\n" + "float k= 2;\n" + "int ll=1;\n" + "}", + Alignment)); Alignment.AlignConsecutiveAssignments = false; Alignment.AlignEscapedNewlinesLeft = true; verifyFormat("#define A \\\n" @@ -9492,7 +9515,7 @@ Alignment); verifyFormat("void SomeFunction(int parameter = 0) {\n" " int const i = 1;\n" - " int * j = 2;\n" + " int *j = 2;\n" " int big = 1;\n" "}", Alignment); @@ -9596,7 +9619,7 @@ " float b,\n" " int c,\n" " uint32_t *d) {\n" - " int * e = 0;\n" + " int *e = 0;\n" " float f = 0;\n" " double g = 0;\n" "}\n" Index: lib/Format/WhitespaceManager.cpp === --- lib/Format/WhitespaceManager.cpp +++ lib/Format/WhitespaceManager.cpp @@ -160,10 +160,15 @@ } } +static bool IsPointerOrReference(tok::TokenKind Kind) { + return Kind == tok::star || Kind == tok::amp || Kind == tok::ampamp; +} + // Align a single sequence of tokens, see AlignTokens below. template static void -AlignTokenSequence(unsigned Start, unsigned End, unsigned Column, F &&Matches, +AlignTokenSequence(const FormatStyle &Style, unsigned Start, unsigned End, + unsigned Column, F &&Matches, SmallVector &Changes) { bool FoundMatchOnLine = false; int Shift = 0; @@ -183,9 +188,23 @@ } assert(Shift >= 0); +if (Shift == 0) + continue; + Changes[i].StartOfTokenColumn += Shift; if (i + 1 != Changes.size()) Changes[i + 1].PreviousEndOfTokenColumn += Shift; + +// If PointerAlignment is PAS_Right, keep *s or &s next to the token +if (Style.PointerAlignment == FormatStyle::PAS_Right && +Changes[i].Spaces != 0) { + for (int previous = i - 1; + previous >= 0 && IsPointerOrReference(Changes[previous].Kind); + previous--) { +Changes[previous + 1].Spaces -= Shift; +Changes[previous].Spaces += Shift; + } +} } } @@ -232,8 +251,8 @@ // containing any matching token to be aligned and located after such token. auto AlignCurrentSequence = [&] { if (StartOfSequence > 0 && StartOfSequence < EndOfSequence) - AlignTokenSequence(StartOfSequence, EndOfSequence, MinColumn, Matches, - Changes); + AlignTokenSequence(Style, StartOfSequence, EndOfSequence, MinColumn, + Matches, Changes); MinColumn = 0; MaxColumn = UINT_MAX; StartOfSequence = 0; @@ -328,13 +347,6 @@ if (!Style.AlignConsecutiveDeclarations) re
Re: [PATCH] D27210: [clang-tidy] misc-string-compare. Adding a new check to clang-tidy
Hi guys, Do you have any extra comments for this? Best regards On Sat, Dec 3, 2016 at 1:34 PM Mads Ravn via Phabricator < revi...@reviews.llvm.org> wrote: > madsravn updated this revision to Diff 80177. > madsravn added a comment. > > Did as comments suggested: Fixed the description about compare returning > -1, 0 or 1. Fixed the ast matcher to only find compare with one argument. > Clang-formatted everything. Added a new test (str.compare("foo")) and wrote > a FIXME for the fixit. > > > https://reviews.llvm.org/D27210 > > Files: > clang-tidy/misc/CMakeLists.txt > clang-tidy/misc/MiscTidyModule.cpp > clang-tidy/misc/StringCompareCheck.cpp > clang-tidy/misc/StringCompareCheck.h > docs/ReleaseNotes.rst > docs/clang-tidy/checks/list.rst > docs/clang-tidy/checks/misc-string-compare.rst > test/clang-tidy/misc-string-compare.cpp > > ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D27123: Add AVR target and toolchain to Clang
dylanmckay added inline comments. Comment at: lib/Basic/Targets.cpp:8543 + case llvm::Triple::avr: +return new AVRTargetInfo(Triple, Opts); case llvm::Triple::bpfeb: If we build clang without `LLVM_EXPERIMENTAL_TARGETS_TO_BUILD=AVR`, how will this work? Will it fail compilation? Will `clang` report that AVR is supported? Will it crash if you try and run `clang`? https://reviews.llvm.org/D27123 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: r289308 - [clang-format] Another attempt at python 3 compatibility
Shouldn't this at least use >=? (But it feels like there is probably a way that doesn't have to do UA sniffing, so to speak) On Dec 9, 2016 8:04 PM, "Vedant Kumar via cfe-commits" < cfe-commits@lists.llvm.org> wrote: > Author: vedantk > Date: Fri Dec 9 18:54:13 2016 > New Revision: 289308 > > URL: http://llvm.org/viewvc/llvm-project?rev=289308&view=rev > Log: > [clang-format] Another attempt at python 3 compatibility > > The entries in vim.current.buffer appear to be decoded strings, which > means that python3 won't allow invoking 'decode' on them. Keep the old > behavior when running under python2, but skip the error-inducing decode > step with python3.. > > Modified: > cfe/trunk/tools/clang-format/clang-format.py > > Modified: cfe/trunk/tools/clang-format/clang-format.py > URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/clang- > format/clang-format.py?rev=289308&r1=289307&r2=289308&view=diff > > == > --- cfe/trunk/tools/clang-format/clang-format.py (original) > +++ cfe/trunk/tools/clang-format/clang-format.py Fri Dec 9 18:54:13 2016 > @@ -29,6 +29,7 @@ from __future__ import print_function > > import difflib > import json > +import platform > import subprocess > import sys > import vim > @@ -48,10 +49,15 @@ fallback_style = None > if vim.eval('exists("g:clang_format_fallback_style")') == "1": >fallback_style = vim.eval('g:clang_format_fallback_style') > > +def get_buffer(encoding): > + if platform.python_version_tuple()[0] == '3': > +return vim.current.buffer > + return [ line.decode(encoding) for line in vim.current.buffer ] > + > def main(): ># Get the current text. >encoding = vim.eval("&encoding") > - buf = [ line.decode(encoding) for line in vim.current.buffer ] > + buf = get_buffer(encoding) >text = '\n'.join(buf) > ># Determine range to format. > > > ___ > cfe-commits mailing list > cfe-commits@lists.llvm.org > http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits > ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
r289328 - Simplify parseShowColorsArgs logic, NFC.
Author: yrnkrn Date: Sat Dec 10 08:55:14 2016 New Revision: 289328 URL: http://llvm.org/viewvc/llvm-project?rev=289328&view=rev Log: Simplify parseShowColorsArgs logic, NFC. Modified: cfe/trunk/lib/Frontend/CompilerInvocation.cpp Modified: cfe/trunk/lib/Frontend/CompilerInvocation.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/CompilerInvocation.cpp?rev=289328&r1=289327&r2=289328&view=diff == --- cfe/trunk/lib/Frontend/CompilerInvocation.cpp (original) +++ cfe/trunk/lib/Frontend/CompilerInvocation.cpp Sat Dec 10 08:55:14 2016 @@ -930,21 +930,13 @@ static bool parseShowColorsArgs(const Ar } ShowColors = DefaultColor ? Colors_Auto : Colors_Off; for (Arg *A : Args) { const Option &O = A->getOption(); -if (!O.matches(options::OPT_fcolor_diagnostics) && -!O.matches(options::OPT_fdiagnostics_color) && -!O.matches(options::OPT_fno_color_diagnostics) && -!O.matches(options::OPT_fno_diagnostics_color) && -!O.matches(options::OPT_fdiagnostics_color_EQ)) - continue; - if (O.matches(options::OPT_fcolor_diagnostics) || O.matches(options::OPT_fdiagnostics_color)) { ShowColors = Colors_On; } else if (O.matches(options::OPT_fno_color_diagnostics) || O.matches(options::OPT_fno_diagnostics_color)) { ShowColors = Colors_Off; -} else { - assert(O.matches(options::OPT_fdiagnostics_color_EQ)); +} else if (O.matches(options::OPT_fdiagnostics_color_EQ)) { StringRef Value(A->getValue()); if (Value == "always") ShowColors = Colors_On; @@ -954,10 +946,9 @@ static bool parseShowColorsArgs(const Ar ShowColors = Colors_Auto; } } - if (ShowColors == Colors_On || - (ShowColors == Colors_Auto && llvm::sys::Process::StandardErrHasColors())) -return true; - return false; + return ShowColors == Colors_On || + (ShowColors == Colors_Auto && + llvm::sys::Process::StandardErrHasColors()); } bool clang::ParseDiagnosticArgs(DiagnosticOptions &Opts, ArgList &Args, ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: [PATCH] D26846: __uuidof() and declspec(uuid("...")) should be allowed on enumeration types
I'll need a few days. I am on vacation until the 15th and have limited Internet access. I can do post commit review if this can't wait that long. -Aaron On Dec 7, 2016 9:07 PM, "David Majnemer via Phabricator" < revi...@reviews.llvm.org> wrote: majnemer added a comment. This LGTM but Aaron should give the go ahead. Repository: rL LLVM https://reviews.llvm.org/D26846 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
r289338 - [AVX-512] Remove 128/256-bit masked vpermilvar builtins and replace with select and the avx unmasked builtins.
Author: ctopper Date: Sat Dec 10 14:27:39 2016 New Revision: 289338 URL: http://llvm.org/viewvc/llvm-project?rev=289338&view=rev Log: [AVX-512] Remove 128/256-bit masked vpermilvar builtins and replace with select and the avx unmasked builtins. Modified: cfe/trunk/include/clang/Basic/BuiltinsX86.def cfe/trunk/lib/Headers/avx512vlintrin.h cfe/trunk/test/CodeGen/avx512vl-builtins.c Modified: cfe/trunk/include/clang/Basic/BuiltinsX86.def URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/BuiltinsX86.def?rev=289338&r1=289337&r2=289338&view=diff == --- cfe/trunk/include/clang/Basic/BuiltinsX86.def (original) +++ cfe/trunk/include/clang/Basic/BuiltinsX86.def Sat Dec 10 14:27:39 2016 @@ -1495,10 +1495,6 @@ TARGET_BUILTIN(__builtin_ia32_vpermt2var TARGET_BUILTIN(__builtin_ia32_vpermt2varpd512_maskz, "V8dV8LLiV8dV8dUc","","avx512f") TARGET_BUILTIN(__builtin_ia32_vpermt2varps512_maskz, "V16fV16iV16fV16fUs","","avx512f") TARGET_BUILTIN(__builtin_ia32_vpermt2varq512_maskz, "V8LLiV8LLiV8LLiV8LLiUc","","avx512f") -TARGET_BUILTIN(__builtin_ia32_vpermilvarpd_mask, "V2dV2dV2LLiV2dUc","","avx512vl") -TARGET_BUILTIN(__builtin_ia32_vpermilvarpd256_mask, "V4dV4dV4LLiV4dUc","","avx512vl") -TARGET_BUILTIN(__builtin_ia32_vpermilvarps_mask, "V4fV4fV4iV4fUc","","avx512vl") -TARGET_BUILTIN(__builtin_ia32_vpermilvarps256_mask, "V8fV8fV8iV8fUc","","avx512vl") TARGET_BUILTIN(__builtin_ia32_ptestmb512, "ULLiV64cV64cULLi","","avx512bw") TARGET_BUILTIN(__builtin_ia32_ptestmw512, "UiV32sV32sUi","","avx512bw") TARGET_BUILTIN(__builtin_ia32_ptestnmb512, "ULLiV64cV64cULLi","","avx512bw") Modified: cfe/trunk/lib/Headers/avx512vlintrin.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Headers/avx512vlintrin.h?rev=289338&r1=289337&r2=289338&view=diff == --- cfe/trunk/lib/Headers/avx512vlintrin.h (original) +++ cfe/trunk/lib/Headers/avx512vlintrin.h Sat Dec 10 14:27:39 2016 @@ -6424,85 +6424,67 @@ _mm256_maskz_rcp14_ps (__mmask8 __U, __m (__v8sf)_mm256_setzero_ps()); }) static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_mask_permutevar_pd (__m128d __W, __mmask8 __U, __m128d __A, - __m128i __C) +_mm_mask_permutevar_pd(__m128d __W, __mmask8 __U, __m128d __A, __m128i __C) { - return (__m128d) __builtin_ia32_vpermilvarpd_mask ((__v2df) __A, - (__v2di) __C, - (__v2df) __W, - (__mmask8) __U); + return (__m128d)__builtin_ia32_selectpd_128((__mmask8)__U, +(__v2df)_mm_permutevar_pd(__A, __C), +(__v2df)__W); } static __inline__ __m128d __DEFAULT_FN_ATTRS -_mm_maskz_permutevar_pd (__mmask8 __U, __m128d __A, __m128i __C) +_mm_maskz_permutevar_pd(__mmask8 __U, __m128d __A, __m128i __C) { - return (__m128d) __builtin_ia32_vpermilvarpd_mask ((__v2df) __A, - (__v2di) __C, - (__v2df) - _mm_setzero_pd (), - (__mmask8) __U); + return (__m128d)__builtin_ia32_selectpd_128((__mmask8)__U, +(__v2df)_mm_permutevar_pd(__A, __C), +(__v2df)_mm_setzero_pd()); } static __inline__ __m256d __DEFAULT_FN_ATTRS -_mm256_mask_permutevar_pd (__m256d __W, __mmask8 __U, __m256d __A, - __m256i __C) +_mm256_mask_permutevar_pd(__m256d __W, __mmask8 __U, __m256d __A, __m256i __C) { - return (__m256d) __builtin_ia32_vpermilvarpd256_mask ((__v4df) __A, - (__v4di) __C, - (__v4df) __W, - (__mmask8) - __U); + return (__m256d)__builtin_ia32_selectpd_256((__mmask8)__U, + (__v4df)_mm256_permutevar_pd(__A, __C), + (__v4df)__W); } static __inline__ __m256d __DEFAULT_FN_ATTRS -_mm256_maskz_permutevar_pd (__mmask8 __U, __m256d __A, __m256i __C) +_mm256_maskz_permutevar_pd(__mmask8 __U, __m256d __A, __m256i __C) { - return (__m256d) __builtin_ia32_vpermilvarpd256_mask ((__v4df) __A, - (__v4di) __C, - (__v4df) - _mm256_setzero_pd (), - (__mmask8) - __U); + return (__m256d)__builtin_ia32_selectpd_256((__mmask8)__U, + (__v4df)_mm256_permutevar_pd(__A, __C), + (__v4df)_mm256_setzero_pd()); } static __inline__ __m128 __DEFAULT_FN_ATTRS -_mm_mask_permutevar_ps (__m128 __W, __mmask8 __U, __m128 __A, - __m128i __C) +_mm_mask_permutevar_ps(__m128 __W, __mmask8 __U, __m128 __A, __m128i __C) { - return (__m128) __builtin_ia32_vpermilvarps_mask ((__v4sf) __A, -(__v4si) __C, -(__v4sf) __W, -(__mmask8) __U); + retur
r289345 - [AVX-512] Remove masking from 512-bit pshufb builtin. The backend now has a version without masking so wrap it with select.
Author: ctopper Date: Sat Dec 10 17:09:52 2016 New Revision: 289345 URL: http://llvm.org/viewvc/llvm-project?rev=289345&view=rev Log: [AVX-512] Remove masking from 512-bit pshufb builtin. The backend now has a version without masking so wrap it with select. This will allow the backend to constant fold these to generic shuffle vectors like 128-bit and 256-bit without having to working about handling masking. Modified: cfe/trunk/include/clang/Basic/BuiltinsX86.def cfe/trunk/lib/Headers/avx512bwintrin.h cfe/trunk/test/CodeGen/avx512bw-builtins.c Modified: cfe/trunk/include/clang/Basic/BuiltinsX86.def URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/BuiltinsX86.def?rev=289345&r1=289344&r2=289345&view=diff == --- cfe/trunk/include/clang/Basic/BuiltinsX86.def (original) +++ cfe/trunk/include/clang/Basic/BuiltinsX86.def Sat Dec 10 17:09:52 2016 @@ -1086,7 +1086,7 @@ TARGET_BUILTIN(__builtin_ia32_pminsb512_ TARGET_BUILTIN(__builtin_ia32_pminsw512_mask, "V32sV32sV32sV32sUi", "", "avx512bw") TARGET_BUILTIN(__builtin_ia32_pminub512_mask, "V64cV64cV64cV64cULLi", "", "avx512bw") TARGET_BUILTIN(__builtin_ia32_pminuw512_mask, "V32sV32sV32sV32sUi", "", "avx512bw") -TARGET_BUILTIN(__builtin_ia32_pshufb512_mask, "V64cV64cV64cV64cULLi", "", "avx512bw") +TARGET_BUILTIN(__builtin_ia32_pshufb512, "V64cV64cV64c", "", "avx512bw") TARGET_BUILTIN(__builtin_ia32_psubsb512_mask, "V64cV64cV64cV64cULLi", "", "avx512bw") TARGET_BUILTIN(__builtin_ia32_psubsw512_mask, "V32sV32sV32sV32sUi", "", "avx512bw") TARGET_BUILTIN(__builtin_ia32_psubusb512_mask, "V64cV64cV64cV64cULLi", "", "avx512bw") Modified: cfe/trunk/lib/Headers/avx512bwintrin.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Headers/avx512bwintrin.h?rev=289345&r1=289344&r2=289345&view=diff == --- cfe/trunk/lib/Headers/avx512bwintrin.h (original) +++ cfe/trunk/lib/Headers/avx512bwintrin.h Sat Dec 10 17:09:52 2016 @@ -1008,31 +1008,25 @@ _mm512_mask_min_epu16 (__m512i __W, __mm } static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_shuffle_epi8 (__m512i __A, __m512i __B) +_mm512_shuffle_epi8(__m512i __A, __m512i __B) { - return (__m512i) __builtin_ia32_pshufb512_mask ((__v64qi) __A, - (__v64qi) __B, - (__v64qi) _mm512_setzero_qi(), - (__mmask64) -1); + return (__m512i)__builtin_ia32_pshufb512((__v64qi)__A,(__v64qi)__B); } static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_mask_shuffle_epi8 (__m512i __W, __mmask64 __U, __m512i __A, -__m512i __B) +_mm512_mask_shuffle_epi8(__m512i __W, __mmask64 __U, __m512i __A, __m512i __B) { - return (__m512i) __builtin_ia32_pshufb512_mask ((__v64qi) __A, - (__v64qi) __B, - (__v64qi) __W, - (__mmask64) __U); + return (__m512i)__builtin_ia32_selectb_512((__mmask64)__U, + (__v64qi)_mm512_shuffle_epi8(__A, __B), + (__v64qi)__W); } static __inline__ __m512i __DEFAULT_FN_ATTRS -_mm512_maskz_shuffle_epi8 (__mmask64 __U, __m512i __A, __m512i __B) +_mm512_maskz_shuffle_epi8(__mmask64 __U, __m512i __A, __m512i __B) { - return (__m512i) __builtin_ia32_pshufb512_mask ((__v64qi) __A, - (__v64qi) __B, - (__v64qi) _mm512_setzero_qi(), - (__mmask64) __U); + return (__m512i)__builtin_ia32_selectb_512((__mmask64)__U, + (__v64qi)_mm512_shuffle_epi8(__A, __B), + (__v64qi)_mm512_setzero_qi()); } static __inline__ __m512i __DEFAULT_FN_ATTRS Modified: cfe/trunk/test/CodeGen/avx512bw-builtins.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/avx512bw-builtins.c?rev=289345&r1=289344&r2=289345&view=diff == --- cfe/trunk/test/CodeGen/avx512bw-builtins.c (original) +++ cfe/trunk/test/CodeGen/avx512bw-builtins.c Sat Dec 10 17:09:52 2016 @@ -820,17 +820,19 @@ __m512i test_mm512_mask_min_epu16(__m512 } __m512i test_mm512_shuffle_epi8(__m512i __A, __m512i __B) { // CHECK-LABEL: @test_mm512_shuffle_epi8 - // CHECK: @llvm.x86.avx512.mask.pshuf.b.512 + // CHECK: @llvm.x86.avx512.pshuf.b.512 return _mm512_shuffle_epi8(__A,__B); } __m512i test_mm512_mask_shuffle_epi8(__m512i __W, __mmask64 __U, __m512i __A, __m512i __B) { // CHECK-LABEL: @test_mm512_mask_shuffle_epi8 - // CHECK: @llvm.x86.avx512.mask.pshuf.b.512 + // CHECK: @llvm.x86.avx512.pshuf.b.512 + // CHECK: select <64 x i1> %{{.*}}, <64 x i8> %{{.*}}, <64 x i8> %{{.*}} return _mm512_mask_shuffle_epi8(__W,__U,__A,__B); } __m512i test_mm512_maskz_shuffle_epi8(__mmask64 __U, __m512i __A, __m512i __B) { // CHECK-LABEL: @test_mm512_maskz_shuffle_epi8 - // CHECK: @llvm.x86.avx512.mask.pshu
[libcxx] r289347 - [libc++] Fix support for multibyte thousands_sep and decimal_point in moneypunct_byname and numpunct_byname.
Author: ericwf Date: Sat Dec 10 18:20:59 2016 New Revision: 289347 URL: http://llvm.org/viewvc/llvm-project?rev=289347&view=rev Log: [libc++] Fix support for multibyte thousands_sep and decimal_point in moneypunct_byname and numpunct_byname. Summary: The underlying C locales provide the `thousands_sep` and `decimal_point` as strings, possible with more than one character. We currently don't handle this case even for `wchar_t`. This patch properly converts the mbs -> wide character for `moneypunct_byname`. For the `moneypunct_byname` case we attempt to narrow the WC and if that fails we also attempt to translate it to some reasonable value. For example we translate U00A0 (non-breaking space) into U0020 (regular space). If none of these conversions succeed then we simply allow the base class to provide a fallback value. Reviewers: mclow.lists, EricWF Subscribers: vangyzen, george.burgess.iv, cfe-commits Differential Revision: https://reviews.llvm.org/D24218 Modified: libcxx/trunk/src/locale.cpp libcxx/trunk/test/std/localization/locale.categories/category.monetary/locale.moneypunct.byname/decimal_point.pass.cpp libcxx/trunk/test/std/localization/locale.categories/category.monetary/locale.moneypunct.byname/thousands_sep.pass.cpp libcxx/trunk/test/std/localization/locale.categories/facet.numpunct/locale.numpunct.byname/grouping.pass.cpp libcxx/trunk/test/std/localization/locale.categories/facet.numpunct/locale.numpunct.byname/thousands_sep.pass.cpp Modified: libcxx/trunk/src/locale.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/src/locale.cpp?rev=289347&r1=289346&r2=289347&view=diff == --- libcxx/trunk/src/locale.cpp (original) +++ libcxx/trunk/src/locale.cpp Sat Dec 10 18:20:59 2016 @@ -4183,6 +4183,54 @@ __widen_from_utf8<32>::~__widen_from_utf { } + +static bool checked_string_to_wchar_convert(wchar_t& dest, +const char* ptr, +__locale_struct* loc) { + if (*ptr == '\0') +return false; + mbstate_t mb = {}; + wchar_t out; + size_t ret = __libcpp_mbrtowc_l(&out, ptr, strlen(ptr), &mb, loc); + if (ret == static_cast(-1) || ret == static_cast(-2)) { +return false; + } + dest = out; + return true; +} + +static bool checked_string_to_char_convert(char& dest, + const char* ptr, + __locale_struct* __loc) { + if (*ptr == '\0') +return false; + if (!ptr[1]) { +dest = *ptr; +return true; + } + // First convert the MBS into a wide char then attempt to narrow it using + // wctob_l. + wchar_t wout; + if (!checked_string_to_wchar_convert(wout, ptr, __loc)) +return false; + int res; + if ((res = __libcpp_wctob_l(wout, __loc)) != char_traits::eof()) { +dest = res; +return true; + } + // FIXME: Work around specific multibyte sequences that we can reasonable + // translate into a different single byte. + switch (wout) { + case L'\u00A0': // non-breaking space +dest = ' '; +return true; + default: +return false; + } + _LIBCPP_UNREACHABLE(); +} + + // numpunct && numpunct locale::id numpunct< char >::id; @@ -4254,10 +4302,10 @@ numpunct_byname::__init(const char " failed to construct for " + string(nm)); lconv* lc = __libcpp_localeconv_l(loc.get()); -if (*lc->decimal_point) -__decimal_point_ = *lc->decimal_point; -if (*lc->thousands_sep) -__thousands_sep_ = *lc->thousands_sep; +checked_string_to_char_convert(__decimal_point_, lc->decimal_point, + loc.get()); +checked_string_to_char_convert(__thousands_sep_, lc->thousands_sep, + loc.get()); __grouping_ = lc->grouping; // localization for truename and falsename is not available } @@ -4288,16 +4336,16 @@ numpunct_byname::__init(const c { __locale_unique_ptr loc(newlocale(LC_ALL_MASK, nm, 0), freelocale); if (loc == nullptr) -__throw_runtime_error("numpunct_byname::numpunct_byname" +__throw_runtime_error("numpunct_byname::numpunct_byname" " failed to construct for " + string(nm)); lconv* lc = __libcpp_localeconv_l(loc.get()); -if (*lc->decimal_point) -__decimal_point_ = *lc->decimal_point; -if (*lc->thousands_sep) -__thousands_sep_ = *lc->thousands_sep; +checked_string_to_wchar_convert(__decimal_point_, lc->decimal_point, +loc.get()); +checked_string_to_wchar_convert(__thousands_sep_, lc->thousands_sep, +loc.get()); __grouping_ = lc->grouping; -// locallization for truename an
r289351 - [AVX-512] Remove masking from 512-bit vpermil builtins. The backend now has versions without masking so wrap it with select.
Author: ctopper Date: Sat Dec 10 19:26:52 2016 New Revision: 289351 URL: http://llvm.org/viewvc/llvm-project?rev=289351&view=rev Log: [AVX-512] Remove masking from 512-bit vpermil builtins. The backend now has versions without masking so wrap it with select. This will allow the backend to constant fold these to generic shuffle vectors like 128-bit and 256-bit without having to working about handling masking. Modified: cfe/trunk/include/clang/Basic/BuiltinsX86.def cfe/trunk/lib/Headers/avx512fintrin.h cfe/trunk/test/CodeGen/avx512f-builtins.c Modified: cfe/trunk/include/clang/Basic/BuiltinsX86.def URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/BuiltinsX86.def?rev=289351&r1=289350&r2=289351&view=diff == --- cfe/trunk/include/clang/Basic/BuiltinsX86.def (original) +++ cfe/trunk/include/clang/Basic/BuiltinsX86.def Sat Dec 10 19:26:52 2016 @@ -1489,8 +1489,8 @@ TARGET_BUILTIN(__builtin_ia32_vpermi2var TARGET_BUILTIN(__builtin_ia32_vpermi2varpd512_mask, "V8dV8dV8LLiV8dUc","","avx512f") TARGET_BUILTIN(__builtin_ia32_vpermi2varps512_mask, "V16fV16fV16iV16fUs","","avx512f") TARGET_BUILTIN(__builtin_ia32_vpermi2varq512_mask, "V8LLiV8LLiV8LLiV8LLiUc","","avx512f") -TARGET_BUILTIN(__builtin_ia32_vpermilvarpd512_mask, "V8dV8dV8LLiV8dUc","","avx512f") -TARGET_BUILTIN(__builtin_ia32_vpermilvarps512_mask, "V16fV16fV16iV16fUs","","avx512f") +TARGET_BUILTIN(__builtin_ia32_vpermilvarpd512, "V8dV8dV8LLi","","avx512f") +TARGET_BUILTIN(__builtin_ia32_vpermilvarps512, "V16fV16fV16i","","avx512f") TARGET_BUILTIN(__builtin_ia32_vpermt2vard512_maskz, "V16iV16iV16iV16iUs","","avx512f") TARGET_BUILTIN(__builtin_ia32_vpermt2varpd512_maskz, "V8dV8LLiV8dV8dUc","","avx512f") TARGET_BUILTIN(__builtin_ia32_vpermt2varps512_maskz, "V16fV16iV16fV16fUs","","avx512f") Modified: cfe/trunk/lib/Headers/avx512fintrin.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Headers/avx512fintrin.h?rev=289351&r1=289350&r2=289351&view=diff == --- cfe/trunk/lib/Headers/avx512fintrin.h (original) +++ cfe/trunk/lib/Headers/avx512fintrin.h Sat Dec 10 19:26:52 2016 @@ -6588,61 +6588,47 @@ _mm512_mask2_permutex2var_epi64 (__m512i (__v16sf)_mm512_setzero_ps()); }) static __inline__ __m512d __DEFAULT_FN_ATTRS -_mm512_permutevar_pd (__m512d __A, __m512i __C) +_mm512_permutevar_pd(__m512d __A, __m512i __C) { - return (__m512d) __builtin_ia32_vpermilvarpd512_mask ((__v8df) __A, - (__v8di) __C, - (__v8df) - _mm512_undefined_pd (), - (__mmask8) -1); + return (__m512d)__builtin_ia32_vpermilvarpd512((__v8df)__A, (__v8di)__C); } static __inline__ __m512d __DEFAULT_FN_ATTRS -_mm512_mask_permutevar_pd (__m512d __W, __mmask8 __U, __m512d __A, __m512i __C) +_mm512_mask_permutevar_pd(__m512d __W, __mmask8 __U, __m512d __A, __m512i __C) { - return (__m512d) __builtin_ia32_vpermilvarpd512_mask ((__v8df) __A, - (__v8di) __C, - (__v8df) __W, - (__mmask8) __U); + return (__m512d)__builtin_ia32_selectpd_512((__mmask8)__U, + (__v8df)_mm512_permutevar_pd(__A, __C), + (__v8df)__W); } static __inline__ __m512d __DEFAULT_FN_ATTRS -_mm512_maskz_permutevar_pd (__mmask8 __U, __m512d __A, __m512i __C) +_mm512_maskz_permutevar_pd(__mmask8 __U, __m512d __A, __m512i __C) { - return (__m512d) __builtin_ia32_vpermilvarpd512_mask ((__v8df) __A, - (__v8di) __C, - (__v8df) - _mm512_setzero_pd (), - (__mmask8) __U); + return (__m512d)__builtin_ia32_selectpd_512((__mmask8)__U, + (__v8df)_mm512_permutevar_pd(__A, __C), + (__v8df)_mm512_setzero_pd()); } static __inline__ __m512 __DEFAULT_FN_ATTRS -_mm512_permutevar_ps (__m512 __A, __m512i __C) +_mm512_permutevar_ps(__m512 __A, __m512i __C) { - return (__m512) __builtin_ia32_vpermilvarps512_mask ((__v16sf) __A, - (__v16si) __C, - (__v16sf) - _mm512_undefined_ps (), - (__mmask16) -1); + return (__m512)__builtin_ia32_vpermilvarps512((__v16sf)__A, (__v16si)__C); } static __inline__ __m512 __DEFAULT_FN_ATTRS -_mm512_mask_permutevar_ps (__m512 __W, __mmask16 __U, __m512 __A, __m512i __C) +_mm512_mask_permutevar_ps(__m512 __W, __mmask16 __U, __m512 __A, __m512i __C) { - return (__m512) __builtin_ia32_vpermilvarps512_mask ((__v16sf) __A, - (__v16si) __C, - (__v16sf) __W, - (__mmask16) __U); + return (__m512)__builtin_ia32_selectps_512((__mmask16)__U, +(__v16sf)_mm512_permutevar_ps(__A, __C), +
[libcxxabi] r289353 - Workaround the removal of dynamic exception specifications in C++17
Author: ericwf Date: Sat Dec 10 19:35:55 2016 New Revision: 289353 URL: http://llvm.org/viewvc/llvm-project?rev=289353&view=rev Log: Workaround the removal of dynamic exception specifications in C++17 Modified: libcxxabi/trunk/test/libcxxabi/test/config.py Modified: libcxxabi/trunk/test/libcxxabi/test/config.py URL: http://llvm.org/viewvc/llvm-project/libcxxabi/trunk/test/libcxxabi/test/config.py?rev=289353&r1=289352&r2=289353&view=diff == --- libcxxabi/trunk/test/libcxxabi/test/config.py (original) +++ libcxxabi/trunk/test/libcxxabi/test/config.py Sat Dec 10 19:35:55 2016 @@ -52,7 +52,11 @@ class Configuration(LibcxxConfiguration) if not self.get_lit_bool('enable_threads', True): self.cxx.compile_flags += ['-D_LIBCXXABI_HAS_NO_THREADS'] self.config.available_features.add('libcxxabi-no-threads') -super(Configuration, self).configure_compile_flags() +# FIXME: Fix the unwind_* tests that test dynamic exception +# specifications so they work in C++17 (or always test in C++14). +# Suppressing this warning is a temporary workaround. +self.cxx.addWarningFlagIfSupported('-Wno-dynamic-exception-spec') +super(Configuration, self).configure_compile_flags() def configure_compile_flags_header_includes(self): self.configure_config_site_header() ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: r289019 - [c++1z] P0003R5: Removing dynamic exception specifications.
To others who follow the libc++abi test failures back to this commit: The unwind_* failures have been addressed in r289353 by using -Wno-dynamic-exception-spec to suppress the C++17 behavior (for now). Currently the libc++ and libc++abi test suite run using -std=c++1z unless otherwise specified. However the dynamic exception specification tests are fundamentally incompatible with C++17, and I don't just want to mark the as UNSUPPORTED because they'll rarely end up running. Instead I'll work on adjusting the test suite to support locking a test to a give C++ dialect. /Eric ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[libcxx] r289355 - Fix count_new.hpp to work w/o dynamic exception specifications
Author: ericwf Date: Sat Dec 10 20:20:17 2016 New Revision: 289355 URL: http://llvm.org/viewvc/llvm-project?rev=289355&view=rev Log: Fix count_new.hpp to work w/o dynamic exception specifications Modified: libcxx/trunk/test/support/count_new.hpp Modified: libcxx/trunk/test/support/count_new.hpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/support/count_new.hpp?rev=289355&r1=289354&r2=289355&view=diff == --- libcxx/trunk/test/support/count_new.hpp (original) +++ libcxx/trunk/test/support/count_new.hpp Sat Dec 10 20:20:17 2016 @@ -234,7 +234,10 @@ public: MemCounter globalMemCounter((MemCounter::MemCounterCtorArg_())); #ifndef DISABLE_NEW_COUNT -void* operator new(std::size_t s) throw(std::bad_alloc) +void* operator new(std::size_t s) +#if TEST_STD_VER < 11 +throw(std::bad_alloc) +#endif { globalMemCounter.newCalled(s); void* ret = std::malloc(s); @@ -243,21 +246,34 @@ void* operator new(std::size_t s) throw( return ret; } -void operator delete(void* p) throw() +void operator delete(void* p) +#if TEST_STD_VER < 11 +throw() +#else +noexcept +#endif { globalMemCounter.deleteCalled(p); std::free(p); } -void* operator new[](std::size_t s) throw(std::bad_alloc) +void* operator new[](std::size_t s) +#if TEST_STD_VER < 11 +throw(std::bad_alloc) +#endif { globalMemCounter.newArrayCalled(s); return operator new(s); } -void operator delete[](void* p) throw() +void operator delete[](void* p) +#if TEST_STD_VER < 11 +throw() +#else +noexcept +#endif { globalMemCounter.deleteArrayCalled(p); operator delete(p); ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[libcxx] r289356 - Fix more uses of dynamic exception specifications in C++17
Author: ericwf Date: Sat Dec 10 20:47:36 2016 New Revision: 289356 URL: http://llvm.org/viewvc/llvm-project?rev=289356&view=rev Log: Fix more uses of dynamic exception specifications in C++17 Modified: libcxx/trunk/test/std/language.support/support.dynamic/new.delete/new.delete.array/delete_align_val_t_replace.pass.cpp libcxx/trunk/test/std/language.support/support.dynamic/new.delete/new.delete.array/new_align_val_t_nothrow_replace.pass.cpp libcxx/trunk/test/std/language.support/support.dynamic/new.delete/new.delete.array/new_align_val_t_replace.pass.cpp libcxx/trunk/test/std/language.support/support.dynamic/new.delete/new.delete.array/new_array_nothrow_replace.pass.cpp libcxx/trunk/test/std/language.support/support.dynamic/new.delete/new.delete.array/new_array_replace.pass.cpp libcxx/trunk/test/std/language.support/support.dynamic/new.delete/new.delete.array/sized_delete_array11.pass.cpp libcxx/trunk/test/std/language.support/support.dynamic/new.delete/new.delete.array/sized_delete_array14.pass.cpp libcxx/trunk/test/std/language.support/support.dynamic/new.delete/new.delete.array/sized_delete_array_calls_unsized_delete_array.pass.cpp libcxx/trunk/test/std/language.support/support.dynamic/new.delete/new.delete.array/sized_delete_array_fsizeddeallocation.sh.cpp libcxx/trunk/test/std/language.support/support.dynamic/new.delete/new.delete.single/delete_align_val_t_replace.pass.cpp libcxx/trunk/test/std/language.support/support.dynamic/new.delete/new.delete.single/new_align_val_t_nothrow_replace.pass.cpp libcxx/trunk/test/std/language.support/support.dynamic/new.delete/new.delete.single/new_align_val_t_replace.pass.cpp libcxx/trunk/test/std/language.support/support.dynamic/new.delete/new.delete.single/new_nothrow_replace.pass.cpp libcxx/trunk/test/std/language.support/support.dynamic/new.delete/new.delete.single/new_replace.pass.cpp libcxx/trunk/test/std/language.support/support.dynamic/new.delete/new.delete.single/sized_delete11.pass.cpp libcxx/trunk/test/std/language.support/support.dynamic/new.delete/new.delete.single/sized_delete14.pass.cpp libcxx/trunk/test/std/language.support/support.dynamic/new.delete/new.delete.single/sized_delete_calls_unsized_delete.pass.cpp libcxx/trunk/test/std/language.support/support.dynamic/new.delete/new.delete.single/sized_delete_fsizeddeallocation.sh.cpp libcxx/trunk/test/support/count_new.hpp libcxx/trunk/test/support/test_allocator.h libcxx/trunk/test/support/test_macros.h Modified: libcxx/trunk/test/std/language.support/support.dynamic/new.delete/new.delete.array/delete_align_val_t_replace.pass.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/language.support/support.dynamic/new.delete/new.delete.array/delete_align_val_t_replace.pass.cpp?rev=289356&r1=289355&r2=289356&view=diff == --- libcxx/trunk/test/std/language.support/support.dynamic/new.delete/new.delete.array/delete_align_val_t_replace.pass.cpp (original) +++ libcxx/trunk/test/std/language.support/support.dynamic/new.delete/new.delete.array/delete_align_val_t_replace.pass.cpp Sat Dec 10 20:47:36 2016 @@ -22,6 +22,8 @@ #include #include +#include "test_macros.h" + constexpr auto OverAligned = alignof(std::max_align_t) * 2; int unsized_delete_called = 0; @@ -34,19 +36,19 @@ void reset() { aligned_delete_called = 0; } -void operator delete(void* p) throw() +void operator delete(void* p) TEST_NOEXCEPT { ++unsized_delete_called; std::free(p); } -void operator delete(void* p, const std::nothrow_t&) throw() +void operator delete(void* p, const std::nothrow_t&) TEST_NOEXCEPT { ++unsized_delete_nothrow_called; std::free(p); } -void operator delete [] (void* p, std::align_val_t a) throw() +void operator delete [] (void* p, std::align_val_t a) TEST_NOEXCEPT { ++aligned_delete_called; std::free(p); Modified: libcxx/trunk/test/std/language.support/support.dynamic/new.delete/new.delete.array/new_align_val_t_nothrow_replace.pass.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/language.support/support.dynamic/new.delete/new.delete.array/new_align_val_t_nothrow_replace.pass.cpp?rev=289356&r1=289355&r2=289356&view=diff == --- libcxx/trunk/test/std/language.support/support.dynamic/new.delete/new.delete.array/new_align_val_t_nothrow_replace.pass.cpp (original) +++ libcxx/trunk/test/std/language.support/support.dynamic/new.delete/new.delete.array/new_align_val_t_nothrow_replace.pass.cpp Sat Dec 10 20:47:36 2016 @@ -20,6 +20,8 @@ #include #include +#include "test_macros.h" + constexpr auto OverAligned = alignof(std::max_align_t) * 2; int A_constructed = 0; @@ -41,7 +43,7 @@ struct B { int new_called = 0; alignas(OverAligned) char Buff[OverAligned * 3]; -void* operat
[libcxx] r289357 - Fix yet another dynamic exception spec
Author: ericwf Date: Sat Dec 10 20:49:37 2016 New Revision: 289357 URL: http://llvm.org/viewvc/llvm-project?rev=289357&view=rev Log: Fix yet another dynamic exception spec Modified: libcxx/trunk/test/std/thread/thread.threads/thread.thread.class/thread.thread.constr/F.pass.cpp Modified: libcxx/trunk/test/std/thread/thread.threads/thread.thread.class/thread.thread.constr/F.pass.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/thread/thread.threads/thread.thread.class/thread.thread.constr/F.pass.cpp?rev=289357&r1=289356&r2=289357&view=diff == --- libcxx/trunk/test/std/thread/thread.threads/thread.thread.class/thread.thread.constr/F.pass.cpp (original) +++ libcxx/trunk/test/std/thread/thread.threads/thread.thread.class/thread.thread.constr/F.pass.cpp Sat Dec 10 20:49:37 2016 @@ -29,7 +29,7 @@ std::atomic throw_one(0x); std::atomic outstanding_new(0); -void* operator new(std::size_t s) throw(std::bad_alloc) +void* operator new(std::size_t s) TEST_THROW_SPEC(std::bad_alloc) { if (throw_one == 0) TEST_THROW(std::bad_alloc()); @@ -40,7 +40,7 @@ void* operator new(std::size_t s) throw( return ret; } -void operator delete(void* p) throw() +void operator delete(void* p) TEST_NOEXCEPT { --outstanding_new; std::free(p); ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[libcxx] r289358 - Fix undefined behavior in container swap tests.
Author: ericwf Date: Sat Dec 10 21:41:12 2016 New Revision: 289358 URL: http://llvm.org/viewvc/llvm-project?rev=289358&view=rev Log: Fix undefined behavior in container swap tests. These swap tests were swapping non-POCS non-equal allocators which is undefined behavior. This patch changes the tests to use allocators which compare equal. In order to test that the allocators were not swapped I added an "id" field to test_allocator which does not participate in equality but does propagate across copies/swaps. This patch is based off of D26623 which was submitted by STL. Modified: libcxx/trunk/test/std/containers/associative/map/map.special/non_member_swap.pass.cpp libcxx/trunk/test/std/containers/associative/multimap/multimap.special/non_member_swap.pass.cpp libcxx/trunk/test/std/containers/associative/multiset/multiset.special/non_member_swap.pass.cpp libcxx/trunk/test/std/containers/associative/set/set.special/non_member_swap.pass.cpp libcxx/trunk/test/std/containers/sequences/deque/deque.special/swap.pass.cpp libcxx/trunk/test/std/containers/sequences/forwardlist/forwardlist.spec/member_swap.pass.cpp libcxx/trunk/test/std/containers/sequences/forwardlist/forwardlist.spec/non_member_swap.pass.cpp libcxx/trunk/test/std/containers/sequences/vector.bool/swap.pass.cpp libcxx/trunk/test/std/containers/sequences/vector/vector.special/swap.pass.cpp libcxx/trunk/test/std/containers/unord/unord.map/swap_member.pass.cpp libcxx/trunk/test/std/containers/unord/unord.map/unord.map.swap/swap_non_member.pass.cpp libcxx/trunk/test/std/containers/unord/unord.multimap/swap_member.pass.cpp libcxx/trunk/test/std/containers/unord/unord.multimap/unord.multimap.swap/swap_non_member.pass.cpp libcxx/trunk/test/std/containers/unord/unord.multiset/swap_member.pass.cpp libcxx/trunk/test/std/containers/unord/unord.multiset/unord.multiset.swap/swap_non_member.pass.cpp libcxx/trunk/test/std/containers/unord/unord.set/swap_member.pass.cpp libcxx/trunk/test/std/containers/unord/unord.set/unord.set.swap/swap_non_member.pass.cpp libcxx/trunk/test/support/test_allocator.h Modified: libcxx/trunk/test/std/containers/associative/map/map.special/non_member_swap.pass.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/containers/associative/map/map.special/non_member_swap.pass.cpp?rev=289358&r1=289357&r2=289358&view=diff == --- libcxx/trunk/test/std/containers/associative/map/map.special/non_member_swap.pass.cpp (original) +++ libcxx/trunk/test/std/containers/associative/map/map.special/non_member_swap.pass.cpp Sat Dec 10 21:41:12 2016 @@ -121,17 +121,17 @@ int main() V(11, 11), V(12, 12) }; -M m1(ar1, ar1+sizeof(ar1)/sizeof(ar1[0]), C(1), A(1)); -M m2(ar2, ar2+sizeof(ar2)/sizeof(ar2[0]), C(2), A(2)); +M m1(ar1, ar1+sizeof(ar1)/sizeof(ar1[0]), C(1), A(1, 1)); +M m2(ar2, ar2+sizeof(ar2)/sizeof(ar2[0]), C(2), A(1, 2)); M m1_save = m1; M m2_save = m2; swap(m1, m2); assert(m1 == m2_save); assert(m2 == m1_save); assert(m1.key_comp() == C(2)); -assert(m1.get_allocator() == A(1)); +assert(m1.get_allocator().get_id() == 1); // not swapped assert(m2.key_comp() == C(1)); -assert(m2.get_allocator() == A(2)); +assert(m2.get_allocator().get_id() == 2); } { typedef other_allocator A; Modified: libcxx/trunk/test/std/containers/associative/multimap/multimap.special/non_member_swap.pass.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/containers/associative/multimap/multimap.special/non_member_swap.pass.cpp?rev=289358&r1=289357&r2=289358&view=diff == --- libcxx/trunk/test/std/containers/associative/multimap/multimap.special/non_member_swap.pass.cpp (original) +++ libcxx/trunk/test/std/containers/associative/multimap/multimap.special/non_member_swap.pass.cpp Sat Dec 10 21:41:12 2016 @@ -155,17 +155,17 @@ int main() V(11, 11), V(12, 12) }; -M m1(ar1, ar1+sizeof(ar1)/sizeof(ar1[0]), C(1), A(1)); -M m2(ar2, ar2+sizeof(ar2)/sizeof(ar2[0]), C(2), A(2)); +M m1(ar1, ar1+sizeof(ar1)/sizeof(ar1[0]), C(1), A(1, 1)); +M m2(ar2, ar2+sizeof(ar2)/sizeof(ar2[0]), C(2), A(1, 2)); M m1_save = m1; M m2_save = m2; swap(m1, m2); assert(m1 == m2_save); assert(m2 == m1_save); assert(m1.key_comp() == C(2)); -assert(m1.get_allocator() == A(2)); +assert(m1.get_allocator().get_id() == 1); // not swapped assert(m2.key_comp() == C(1)); -assert(m2.get_allocator() == A(1)); +assert(m2.get_allocator().get_id() == 2); } #if TEST_STD_VER >= 11 { Modified: libcxx/trunk
[libcxx] r289359 - Fix copy/paste errors introduced in r289358
Author: ericwf Date: Sat Dec 10 22:00:26 2016 New Revision: 289359 URL: http://llvm.org/viewvc/llvm-project?rev=289359&view=rev Log: Fix copy/paste errors introduced in r289358 Modified: libcxx/trunk/test/std/containers/associative/multimap/multimap.special/non_member_swap.pass.cpp libcxx/trunk/test/std/containers/unord/unord.multimap/swap_member.pass.cpp Modified: libcxx/trunk/test/std/containers/associative/multimap/multimap.special/non_member_swap.pass.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/containers/associative/multimap/multimap.special/non_member_swap.pass.cpp?rev=289359&r1=289358&r2=289359&view=diff == --- libcxx/trunk/test/std/containers/associative/multimap/multimap.special/non_member_swap.pass.cpp (original) +++ libcxx/trunk/test/std/containers/associative/multimap/multimap.special/non_member_swap.pass.cpp Sat Dec 10 22:00:26 2016 @@ -121,17 +121,17 @@ int main() V(11, 11), V(12, 12) }; -M m1(ar1, ar1+sizeof(ar1)/sizeof(ar1[0]), C(1), A(1)); -M m2(ar2, ar2+sizeof(ar2)/sizeof(ar2[0]), C(2), A(2)); +M m1(ar1, ar1+sizeof(ar1)/sizeof(ar1[0]), C(1), A(1, 1)); +M m2(ar2, ar2+sizeof(ar2)/sizeof(ar2[0]), C(2), A(1, 2)); M m1_save = m1; M m2_save = m2; swap(m1, m2); assert(m1 == m2_save); assert(m2 == m1_save); assert(m1.key_comp() == C(2)); -assert(m1.get_allocator() == A(1)); +assert(m1.get_allocator().get_id() == 1); assert(m2.key_comp() == C(1)); -assert(m2.get_allocator() == A(2)); +assert(m2.get_allocator().get_id() == 2); } { typedef other_allocator A; @@ -155,17 +155,17 @@ int main() V(11, 11), V(12, 12) }; -M m1(ar1, ar1+sizeof(ar1)/sizeof(ar1[0]), C(1), A(1, 1)); -M m2(ar2, ar2+sizeof(ar2)/sizeof(ar2[0]), C(2), A(1, 2)); +M m1(ar1, ar1+sizeof(ar1)/sizeof(ar1[0]), C(1), A(1)); +M m2(ar2, ar2+sizeof(ar2)/sizeof(ar2[0]), C(2), A(2)); M m1_save = m1; M m2_save = m2; swap(m1, m2); assert(m1 == m2_save); assert(m2 == m1_save); assert(m1.key_comp() == C(2)); -assert(m1.get_allocator().get_id() == 1); // not swapped +assert(m1.get_allocator() == A(2)); assert(m2.key_comp() == C(1)); -assert(m2.get_allocator().get_id() == 2); +assert(m2.get_allocator() == A(1)); } #if TEST_STD_VER >= 11 { Modified: libcxx/trunk/test/std/containers/unord/unord.multimap/swap_member.pass.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/containers/unord/unord.multimap/swap_member.pass.cpp?rev=289359&r1=289358&r2=289359&view=diff == --- libcxx/trunk/test/std/containers/unord/unord.multimap/swap_member.pass.cpp (original) +++ libcxx/trunk/test/std/containers/unord/unord.multimap/swap_member.pass.cpp Sat Dec 10 22:00:26 2016 @@ -35,8 +35,8 @@ int main() typedef test_allocator > Alloc; typedef std::unordered_multimap C; typedef std::pair P; -C c1(0, Hash(1), Compare(1), Alloc(1)); -C c2(0, Hash(2), Compare(2), Alloc(2)); +C c1(0, Hash(1), Compare(1), Alloc(1, 1)); +C c2(0, Hash(2), Compare(2), Alloc(1, 2)); c2.max_load_factor(2); c1.swap(c2); @@ -75,8 +75,8 @@ int main() P(70, "seventy"), P(80, "eighty"), }; -C c1(0, Hash(1), Compare(1), Alloc(1)); -C c2(std::begin(a2), std::end(a2), 0, Hash(2), Compare(2), Alloc(2)); +C c1(0, Hash(1), Compare(1), Alloc(1, 1)); +C c2(std::begin(a2), std::end(a2), 0, Hash(2), Compare(2), Alloc(1, 2)); c2.max_load_factor(2); c1.swap(c2); @@ -121,8 +121,8 @@ int main() P(1, "four"), P(2, "four"), }; -C c1(std::begin(a1), std::end(a1), 0, Hash(1), Compare(1), Alloc(1)); -C c2(0, Hash(2), Compare(2), Alloc(2)); +C c1(std::begin(a1), std::end(a1), 0, Hash(1), Compare(1), Alloc(1, 1)); +C c2(0, Hash(2), Compare(2), Alloc(1, 2)); c2.max_load_factor(2); c1.swap(c2); @@ -176,8 +176,8 @@ int main() P(70, "seventy"), P(80, "eighty"), }; -C c1(std::begin(a1), std::end(a1), 0, Hash(1), Compare(1), Alloc(1)); -C c2(std::begin(a2), std::end(a2), 0, Hash(2), Compare(2), Alloc(2)); +C c1(std::begin(a1), std::end(a1), 0, Hash(1), Compare(1), Alloc(1, 1)); +C c2(std::begin(a2), std::end(a2), 0, Hash(2), Compare(2), Alloc(1, 2)); c2.max_load_factor(2); c1.swap(c2); ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe
r289361 - [CrashReproducer] Setup a module collector callback for HeaderInclude
Author: bruno Date: Sat Dec 10 22:27:31 2016 New Revision: 289361 URL: http://llvm.org/viewvc/llvm-project?rev=289361&view=rev Log: [CrashReproducer] Setup a module collector callback for HeaderInclude Collect missing include that cannot be fetched otherwise (e.g. when using headermaps). rdar://problem/27913709 Modified: cfe/trunk/lib/Frontend/ModuleDependencyCollector.cpp cfe/trunk/test/Modules/crash-vfs-headermaps.m Modified: cfe/trunk/lib/Frontend/ModuleDependencyCollector.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/ModuleDependencyCollector.cpp?rev=289361&r1=289360&r2=289361&view=diff == --- cfe/trunk/lib/Frontend/ModuleDependencyCollector.cpp (original) +++ cfe/trunk/lib/Frontend/ModuleDependencyCollector.cpp Sat Dec 10 22:27:31 2016 @@ -38,6 +38,24 @@ public: } }; +struct ModuleDependencyPPCallbacks : public PPCallbacks { + ModuleDependencyCollector &Collector; + SourceManager &SM; + ModuleDependencyPPCallbacks(ModuleDependencyCollector &Collector, + SourceManager &SM) + : Collector(Collector), SM(SM) {} + + void InclusionDirective(SourceLocation HashLoc, const Token &IncludeTok, + StringRef FileName, bool IsAngled, + CharSourceRange FilenameRange, const FileEntry *File, + StringRef SearchPath, StringRef RelativePath, + const Module *Imported) override { +if (!File) + return; +Collector.addFile(File->getName()); + } +}; + struct ModuleDependencyMMCallbacks : public ModuleMapCallbacks { ModuleDependencyCollector &Collector; ModuleDependencyMMCallbacks(ModuleDependencyCollector &Collector) @@ -102,6 +120,8 @@ void ModuleDependencyCollector::attachTo } void ModuleDependencyCollector::attachToPreprocessor(Preprocessor &PP) { + PP.addPPCallbacks(llvm::make_unique( + *this, PP.getSourceManager())); PP.getHeaderSearchInfo().getModuleMap().addModuleMapCallbacks( llvm::make_unique(*this)); } Modified: cfe/trunk/test/Modules/crash-vfs-headermaps.m URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/crash-vfs-headermaps.m?rev=289361&r1=289360&r2=289361&view=diff == --- cfe/trunk/test/Modules/crash-vfs-headermaps.m (original) +++ cfe/trunk/test/Modules/crash-vfs-headermaps.m Sat Dec 10 22:27:31 2016 @@ -40,6 +40,13 @@ // CHECKYAML-NEXT: 'overlay-relative': 'true', // CHECKYAML-NEXT: 'ignore-non-existent-contents': 'false' // CHECKYAML: 'type': 'directory' +// CHECKYAML: 'name': "/[[PATH:.*]]/Foo.framework/Headers", +// CHECKYAML-NEXT: 'contents': [ +// CHECKYAML-NEXT: { +// CHECKYAML-NEXT: 'type': 'file', +// CHECKYAML-NEXT: 'name': "Foo.h", +// CHECKYAML-NEXT: 'external-contents': "/[[PATH]]/Foo.framework/Headers/Foo.h" +// CHECKYAML: 'type': 'directory' // CHECKYAML: 'name': "/[[PATH:.*]]/i", // CHECKYAML-NEXT: 'contents': [ // CHECKYAML-NEXT: { ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
r289360 - [CrashReproducer] Collect headermap files
Author: bruno Date: Sat Dec 10 22:27:28 2016 New Revision: 289360 URL: http://llvm.org/viewvc/llvm-project?rev=289360&view=rev Log: [CrashReproducer] Collect headermap files Include headermaps (.hmap files) in the .cache directory and add VFS entries. All headermaps are known after HeaderSearch setup, collect them right after. rdar://problem/27913709 Added: cfe/trunk/test/Modules/crash-vfs-headermaps.m Modified: cfe/trunk/include/clang/Lex/HeaderSearch.h cfe/trunk/lib/Frontend/CompilerInstance.cpp cfe/trunk/lib/Lex/HeaderSearch.cpp Modified: cfe/trunk/include/clang/Lex/HeaderSearch.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Lex/HeaderSearch.h?rev=289360&r1=289359&r2=289360&view=diff == --- cfe/trunk/include/clang/Lex/HeaderSearch.h (original) +++ cfe/trunk/include/clang/Lex/HeaderSearch.h Sat Dec 10 22:27:28 2016 @@ -464,6 +464,9 @@ public: /// FileEntry, uniquing them through the 'HeaderMaps' datastructure. const HeaderMap *CreateHeaderMap(const FileEntry *FE); + /// \brief Get filenames for all registered header maps. + void getHeaderMapFileNames(SmallVectorImpl &Names) const; + /// \brief Retrieve the name of the module file that should be used to /// load the given module. /// Modified: cfe/trunk/lib/Frontend/CompilerInstance.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/CompilerInstance.cpp?rev=289360&r1=289359&r2=289360&view=diff == --- cfe/trunk/lib/Frontend/CompilerInstance.cpp (original) +++ cfe/trunk/lib/Frontend/CompilerInstance.cpp Sat Dec 10 22:27:28 2016 @@ -141,6 +141,14 @@ void CompilerInstance::setModuleDepColle ModuleDepCollector = std::move(Collector); } +static void collectHeaderMaps(const HeaderSearch &HS, + std::shared_ptr MDC) { + SmallVector HeaderMapFileNames; + HS.getHeaderMapFileNames(HeaderMapFileNames); + for (auto &Name : HeaderMapFileNames) +MDC->addFile(Name); +} + // Diagnostics static void SetUpDiagnosticLog(DiagnosticOptions *DiagOpts, const CodeGenOptions *CodeGenOpts, @@ -366,8 +374,12 @@ void CompilerInstance::createPreprocesso DepOpts.ModuleDependencyOutputDir); } - if (ModuleDepCollector) + // If there is a module dep collector, register with other dep collectors + // and also (a) collect header maps and (b) TODO: input vfs overlay files. + if (ModuleDepCollector) { addDependencyCollector(ModuleDepCollector); +collectHeaderMaps(PP->getHeaderSearchInfo(), ModuleDepCollector); + } for (auto &Listener : DependencyCollectors) Listener->attachToPreprocessor(*PP); Modified: cfe/trunk/lib/Lex/HeaderSearch.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Lex/HeaderSearch.cpp?rev=289360&r1=289359&r2=289360&view=diff == --- cfe/trunk/lib/Lex/HeaderSearch.cpp (original) +++ cfe/trunk/lib/Lex/HeaderSearch.cpp Sat Dec 10 22:27:28 2016 @@ -121,6 +121,13 @@ const HeaderMap *HeaderSearch::CreateHea return nullptr; } +/// \brief Get filenames for all registered header maps. +void HeaderSearch::getHeaderMapFileNames( +SmallVectorImpl &Names) const { + for (auto &HM : HeaderMaps) +Names.push_back(HM.first->getName()); +} + std::string HeaderSearch::getModuleFileName(Module *Module) { const FileEntry *ModuleMap = getModuleMap().getModuleMapFileForUniquing(Module); Added: cfe/trunk/test/Modules/crash-vfs-headermaps.m URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/crash-vfs-headermaps.m?rev=289360&view=auto == --- cfe/trunk/test/Modules/crash-vfs-headermaps.m (added) +++ cfe/trunk/test/Modules/crash-vfs-headermaps.m Sat Dec 10 22:27:28 2016 @@ -0,0 +1,48 @@ +// REQUIRES: crash-recovery, shell, system-darwin + +// This uses a headermap with this entry: +// Foo.h -> Foo/Foo.h + +// Copy out the headermap from test/Preprocessor/Inputs/headermap-rel and avoid +// adding another binary format to the repository. + +// RUN: rm -rf %t +// RUN: mkdir -p %t/m +// RUN: cp -a %S/../Preprocessor/Inputs/headermap-rel %t/i +// RUN: echo '// Foo.h' > %t/i/Foo.framework/Headers/Foo.h + +// RUN: not env FORCE_CLANG_DIAGNOSTICS_CRASH= TMPDIR=%t TEMP=%t TMP=%t \ +// RUN: %clang -fsyntax-only -fmodules -fmodules-cache-path=%t/m %s \ +// RUN: -I %t/i/foo.hmap -F %t/i 2>&1 | FileCheck %s + +// RUN: FileCheck --check-prefix=CHECKSH %s -input-file %t/crash-vfs-*.sh +// RUN: FileCheck --check-prefix=CHECKYAML %s -input-file \ +// RUN: %t/crash-vfs-*.cache/vfs/vfs.yaml + +#include "Foo.h" +#include "Foo.h" + +// CHECK: Preprocessed source(s) and associated run script(s) are located at: +// CHECK-NEXT: note: diagnostic msg: {{.*}}.m +// CHECK-NEXT: note:
Re: r289019 - [c++1z] P0003R5: Removing dynamic exception specifications.
Thanks Eric! On 10 Dec 2016 5:58 pm, "Eric Fiselier via cfe-commits" < cfe-commits@lists.llvm.org> wrote: To others who follow the libc++abi test failures back to this commit: The unwind_* failures have been addressed in r289353 by using -Wno-dynamic-exception-spec to suppress the C++17 behavior (for now). Currently the libc++ and libc++abi test suite run using -std=c++1z unless otherwise specified. However the dynamic exception specification tests are fundamentally incompatible with C++17, and I don't just want to mark the as UNSUPPORTED because they'll rarely end up running. Instead I'll work on adjusting the test suite to support locking a test to a give C++ dialect. /Eric ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: r289019 - [c++1z] P0003R5: Removing dynamic exception specifications.
No worries. There were also some libc++ test failures for the same reason. These have also been addressed. /Eric On Sat, Dec 10, 2016 at 9:51 PM, Richard Smith wrote: > Thanks Eric! > > On 10 Dec 2016 5:58 pm, "Eric Fiselier via cfe-commits" < > cfe-commits@lists.llvm.org> wrote: > > To others who follow the libc++abi test failures back to this commit: > > The unwind_* failures have been addressed in r289353 by using > -Wno-dynamic-exception-spec to suppress the C++17 behavior (for now). > > Currently the libc++ and libc++abi test suite run using -std=c++1z unless > otherwise specified. However the dynamic exception specification tests > are fundamentally incompatible with C++17, and I don't just want to mark > the as UNSUPPORTED because they'll rarely end up running. > Instead I'll work on adjusting the test suite to support locking a test to > a give C++ dialect. > > /Eric > > ___ > cfe-commits mailing list > cfe-commits@lists.llvm.org > http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits > > > ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[libcxxabi] r289365 - Fix signed comparison warning
Author: ericwf Date: Sat Dec 10 23:43:20 2016 New Revision: 289365 URL: http://llvm.org/viewvc/llvm-project?rev=289365&view=rev Log: Fix signed comparison warning Modified: libcxxabi/trunk/test/uncaught_exceptions.pass.cpp Modified: libcxxabi/trunk/test/uncaught_exceptions.pass.cpp URL: http://llvm.org/viewvc/llvm-project/libcxxabi/trunk/test/uncaught_exceptions.pass.cpp?rev=289365&r1=289364&r2=289365&view=diff == --- libcxxabi/trunk/test/uncaught_exceptions.pass.cpp (original) +++ libcxxabi/trunk/test/uncaught_exceptions.pass.cpp Sat Dec 10 23:43:20 2016 @@ -23,9 +23,9 @@ struct A { }; struct B { -B(int cnt) : data_(cnt) {} +B(unsigned cnt) : data_(cnt) {} ~B() { assert( data_ == __cxxabiv1::__cxa_uncaught_exceptions()); } -int data_; +unsigned data_; }; int main () ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[libcxx] r289366 - Re-disable -Wsign-compare for now. I didn't catch all occurrences
Author: ericwf Date: Sat Dec 10 23:45:55 2016 New Revision: 289366 URL: http://llvm.org/viewvc/llvm-project?rev=289366&view=rev Log: Re-disable -Wsign-compare for now. I didn't catch all occurrences Modified: libcxx/trunk/test/libcxx/test/config.py Modified: libcxx/trunk/test/libcxx/test/config.py URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/libcxx/test/config.py?rev=289366&r1=289365&r2=289366&view=diff == --- libcxx/trunk/test/libcxx/test/config.py (original) +++ libcxx/trunk/test/libcxx/test/config.py Sat Dec 10 23:45:55 2016 @@ -659,6 +659,7 @@ class Configuration(object): # These warnings should be enabled in order to support the MSVC # team using the test suite; They enable the warnings below and # expect the test suite to be clean. +# FIXME: Re-enable this after fixing remaining occurrences. self.cxx.addWarningFlagIfSupported('-Wsign-compare') # FIXME: Enable the two warnings below. self.cxx.addWarningFlagIfSupported('-Wno-unused-variable') ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[libcxx] r289367 - Actually re-disable -Wsign-compare
Author: ericwf Date: Sat Dec 10 23:54:43 2016 New Revision: 289367 URL: http://llvm.org/viewvc/llvm-project?rev=289367&view=rev Log: Actually re-disable -Wsign-compare Modified: libcxx/trunk/test/libcxx/test/config.py Modified: libcxx/trunk/test/libcxx/test/config.py URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/libcxx/test/config.py?rev=289367&r1=289366&r2=289367&view=diff == --- libcxx/trunk/test/libcxx/test/config.py (original) +++ libcxx/trunk/test/libcxx/test/config.py Sat Dec 10 23:54:43 2016 @@ -660,7 +660,7 @@ class Configuration(object): # team using the test suite; They enable the warnings below and # expect the test suite to be clean. # FIXME: Re-enable this after fixing remaining occurrences. -self.cxx.addWarningFlagIfSupported('-Wsign-compare') +self.cxx.addWarningFlagIfSupported('-Wno-sign-compare') # FIXME: Enable the two warnings below. self.cxx.addWarningFlagIfSupported('-Wno-unused-variable') self.cxx.addWarningFlagIfSupported('-Wno-unused-parameter') ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits