r332314 - [AST] Fix printing tag decl groups in decl contexts

Hans Wennborg via cfe-commits cfe-commits at lists.llvm.org
Tue May 15 03:23:27 PDT 2018


This broke the ast-print-record-decl.c test on Windows, see for
example http://lab.llvm.org:8011/builders/clang-with-thin-lto-windows/builds/9066

One way to reproduce the failure on Linux is to pass a Windows triple
to this ast-print command:

--- a/test/Misc/ast-print-record-decl.c
+++ b/test/Misc/ast-print-record-decl.c
@@ -54,7 +54,7 @@
 //   RUN:        -DKW=struct -DBASES=' : B' -o - -xc++ %s \
 //   RUN: | FileCheck --check-prefixes=CHECK,LLVM %s
 //
-//   RUN: %clang_cc1 -verify -ast-print -DKW=struct -DBASES=' : B' -xc++ %s \
+//   RUN: %clang_cc1 -verify -triple i686-pc-win32 -ast-print
-DKW=struct -DBASES=' : B' -xc++ %s \
 //   RUN: > %t.cpp
 //   RUN: FileCheck --check-prefixes=CHECK,PRINT,PRINT-CXX -DKW=struct \
 //   RUN:           -DBASES=' : B' %s --input-file %t.cpp

What's happening is that on Windows, "__single_inheritance(1)" is
printed before T1. But if I change the test to allow that in the
output, it still doesn't pass as Clang doesn't seem able to parse it.

I've worked around the problem by adding a Linux triple here in
r332335, but someone should probably look into it properly.

Thanks,
Hans

On Tue, May 15, 2018 at 2:44 AM, Joel E. Denny via cfe-commits
<cfe-commits at lists.llvm.org> wrote:
> Author: jdenny
> Date: Mon May 14 17:44:14 2018
> New Revision: 332314
>
> URL: http://llvm.org/viewvc/llvm-project?rev=332314&view=rev
> Log:
> [AST] Fix printing tag decl groups in decl contexts
>
> For example, given:
>
>   struct T1 {
>     struct T2 *p0;
>   };
>
> -ast-print produced:
>
>   struct T1 {
>     struct T2;
>     struct T2 *p0;
>   };
>
> Compiling that produces a warning that the first struct T2 declaration
> does not declare anything.
>
> Details:
>
> A tag decl group is one or more decls that share a type specifier that
> is a tag decl (that is, a struct/union/class/enum decl).  Within
> functions, the parser builds such a tag decl group as part of a
> DeclStmt.  However, in decl contexts, such as file scope or a member
> list, the parser does not group together the members of a tag decl
> group.  Previously, detection of tag decl groups during printing was
> implemented but only if the tag decl was unnamed.  Otherwise, as in
> the above example, the members of the group did not print together and
> so sometimes introduced warnings.
>
> This patch extends detection of tag decl groups in decl contexts to
> any tag decl that is recorded in the AST as not free-standing.
>
> Reviewed by: rsmith
>
> Differential Revision: https://reviews.llvm.org/D45465
>
> Modified:
>     cfe/trunk/lib/AST/DeclPrinter.cpp
>     cfe/trunk/test/Misc/ast-print-enum-decl.c
>     cfe/trunk/test/Misc/ast-print-record-decl.c
>     cfe/trunk/test/Sema/ast-print.c
>     cfe/trunk/test/SemaCXX/ast-print.cpp


More information about the cfe-commits mailing list