[cfe-commits] r172087 - in /cfe/trunk: test/TableGen/ test/TableGen/DiagnosticBase.inc test/TableGen/anonymous-groups.td test/TableGen/lit.local.cfg test/TableGen/tg-fixits.td utils/TableGen/ClangDiagnosticsEmitter.cpp

Dmitri Gribenko gribozavr at gmail.com
Thu Jan 10 14:19:13 PST 2013


On Thu, Jan 10, 2013 at 11:54 PM, Jordan Rose <jordan_rose at apple.com> wrote:
>
> On Jan 10, 2013, at 13:51 , Dmitri Gribenko <gribozavr at gmail.com> wrote:
>
> On Thu, Jan 10, 2013 at 11:47 PM, Jordan Rose <jordan_rose at apple.com> wrote:
>
>
> On Jan 10, 2013, at 13:41 , Dmitri Gribenko <gribozavr at gmail.com> wrote:
>
> On Thu, Jan 10, 2013 at 8:50 PM, Jordan Rose <jordan_rose at apple.com> wrote:
>
> --- cfe/trunk/test/TableGen/tg-fixits.td (added)
> +++ cfe/trunk/test/TableGen/tg-fixits.td Thu Jan 10 12:50:46 2013
> @@ -0,0 +1,41 @@
> +// RUN: clang-tblgen -gen-clang-diag-groups -I%S %s -o /dev/null 2>&1 |
> FileCheck --strict-whitespace %s
> +include "DiagnosticBase.inc"
> +
> +def NamedGroup : DiagGroup<"name">;
> +
> +def InNamedGroup : Warning<"">, InGroup<DiagGroup<"name">>;
> +//      CHECK: tg-fixits.td:[[@LINE-1]]:41: error: group 'name' is referred
> to anonymously
> +// CHECK-NEXT: {{^def InNamedGroup : Warning<"">,
> InGroup<DiagGroup<"name">>;}}
> +// CHECK-NEXT: {{^
> ~~~~~~~~\^~~~~~~~~~~~~~~~~~}}
> +// CHECK-NEXT: {{^                                InGroup<NamedGroup>}}
> +
> +def Wrapped : Warning<"">, InGroup<DiagGroup<
> +  "name">>;
> +//      CHECK: tg-fixits.td:[[@LINE-2]]:36: error: group 'name' is referred
> to anonymously
> +// CHECK-NEXT: {{^def Wrapped : Warning<"">, InGroup<DiagGroup<}}
> +// CHECK-NEXT: {{^                           ~~~~~~~~\^~~~~~~~~~}}
> +// CHECK-NEXT: {{^                           InGroup<NamedGroup>}}
> +
> +def AlsoWrapped : Warning<"">, InGroup<
> +  DiagGroup<"name">>;
> +//      CHECK: tg-fixits.td:[[@LINE-1]]:3: error: group 'name' is referred
> to anonymously
> +// CHECK-NEXT: {{^  DiagGroup<"name">>;}}
> +// CHECK-NEXT: {{^~~\^~~~~~~~~~~~~~~~~~}}
> +// CHECK-NEXT: {{^InGroup<NamedGroup>}}
> +
> +// The following lines contain hard tabs (\t); do not change this!
> +def HardTabs : Warning<"">,
> +       InGroup<        DiagGroup<"name">       >;
> +//      CHECK: tg-fixits.td:[[@LINE-1]]:11: error: group 'name' is referred
> to anonymously
> +// CHECK-NEXT: {{^        InGroup<        DiagGroup<"name">       >;}}
> +// CHECK-NEXT: {{^        ~~~~~~~~~~~~~~~~\^~~~~~~~~~~~~~~~~~~~~~~~~}}
> +// CHECK-NEXT: {{^        InGroup<NamedGrop>}}
> +
> +// The following line has Unicode characters in it; do not change them!
> +// FIXME: For now, we just give up on printing carets/ranges/fixits for
> +// lines with Unicode in them, because SMDiagnostic don't keep a
> byte<->column
> +// map around to line things up like Clang does.
> +def Unicode : Warning<"ユニコード">, InGroup<DiagGroup<"name">>;
> +//      CHECK: tg-fixits.td:[[@LINE-1]]:51: error: group 'name' is referred
> to anonymously
> +// CHECK-NEXT: def Unicode : Warning<"{{[^"]+}}">,
> InGroup<DiagGroup<"name">>;
> +// CHECK-NEXT: note:
>
>
> Hello Jordan,
>
> The Unicode test fails:
> http://lab.llvm.org:8011/builders/clang-x86_64-debian-fast/builds/119
>
> Dmitri
>
>
> Hm. That doesn't make sense to me; the Unicode is clearly in the output,
> Japanese characters require three bytes of UTF-8, and presumably take 1 or 2
> columns each. Is there a way to get the input that FileCheck is seeing from
> this builder?
>
>
> The Japanese characters are fine (but since they are double-width, our
> underlining in the terminal is funny).  The issue is with missing
> CHECK lines.
>
>
> Right, but the code in SourceMgr.cpp is supposed to say "oh, we can't print
> a caret here because we'll get it wrong", and leave out the caret and fixit
> lines (see LLVM r172086). Why would that fail?

Breakpoint 1, llvm::SMDiagnostic::print (this=0x7fffffffd408,
ProgName=0x0, S=..., ShowColors=true) at
/home/gribozavr/clang/llvm/lib/Support/SourceMgr.cpp:400
400	  SmallString<128> PrintableLine(LineContents);
(gdb) p LineContents.data()
$3 = 0x78cb38 "def Unicode : Warning<\"ユニコード\">, InGroup<DiagGroup<\"name\">>;"
(gdb) n
401	  std::replace(PrintableLine.begin(), PrintableLine.end(), '\t', ' ');
(gdb) n
402	  size_t NumColumns = (size_t)llvm::sys::locale::columnWidth(PrintableLine);
(gdb) n
403	  if (NumColumns != PrintableLine.size()) {
(gdb) p NumColumns
$4 = 69
(gdb) p PrintableLine.size()
$5 = 69

Seems like columnWidth() is not working properly in this case.  I'm
running with LANG=ru_UA.utf8, same results with LANG=en_US.utf8.

Dmitri

-- 
main(i,j){for(i=2;;i++){for(j=2;j<i;j++){if(!(i%j)){j=0;break;}}if
(j){printf("%d\n",i);}}} /*Dmitri Gribenko <gribozavr at gmail.com>*/




More information about the cfe-commits mailing list