r299355 - [ASTImporter] Fix for importing unnamed structs

Yung, Douglas via cfe-commits cfe-commits at lists.llvm.org
Mon Apr 3 14:57:37 PDT 2017


Hi Peter and Gabor,

This change is causing a failure of the test "Clang :: ASTMerge/struct/test.c" on the PS4 Windows bot:

http://lab.llvm.org:8011/builders/llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast/builds/7609

FAIL: Clang :: ASTMerge/struct/test.c (18568 of 32374)
******************** TEST 'Clang :: ASTMerge/struct/test.c' FAILED ********************
Script:
--
C:/Buildbot/Slave/llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast/llvm.obj/./bin/clang.EXE -cc1 -internal-isystem C:\Buildbot\Slave\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.obj\lib\clang\5.0.0\include -nostdsysteminc -emit-pch -o C:\Buildbot\Slave\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.obj\tools\clang\test\ASTMerge\struct\Output\test.c.tmp.1.ast C:\Buildbot\Slave\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.src\tools\clang\test\ASTMerge\struct/Inputs/struct1.c
C:/Buildbot/Slave/llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast/llvm.obj/./bin/clang.EXE -cc1 -internal-isystem C:\Buildbot\Slave\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.obj\lib\clang\5.0.0\include -nostdsysteminc -emit-pch -o C:\Buildbot\Slave\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.obj\tools\clang\test\ASTMerge\struct\Output\test.c.tmp.2.ast C:\Buildbot\Slave\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.src\tools\clang\test\ASTMerge\struct/Inputs/struct2.c
not C:/Buildbot/Slave/llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast/llvm.obj/./bin/clang.EXE -cc1 -internal-isystem C:\Buildbot\Slave\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.obj\lib\clang\5.0.0\include -nostdsysteminc -ast-merge C:\Buildbot\Slave\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.obj\tools\clang\test\ASTMerge\struct\Output\test.c.tmp.1.ast -ast-merge C:\Buildbot\Slave\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.obj\tools\clang\test\ASTMerge\struct\Output\test.c.tmp.2.ast -fsyntax-only C:\Buildbot\Slave\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.src\tools\clang\test\ASTMerge\struct\test.c 2>&1 | C:/Buildbot/Slave/llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast/llvm.obj/./bin\FileCheck.EXE C:\Buildbot\Slave\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.src\tools\clang\test\ASTMerge\struct\test.c
--
Exit Code: 1

Command Output (stdout):
--
$ "C:/Buildbot/Slave/llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast/llvm.obj/./bin/clang.EXE" "-cc1" "-internal-isystem" "C:\Buildbot\Slave\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.obj\lib\clang\5.0.0\include" "-nostdsysteminc" "-emit-pch" "-o" "C:\Buildbot\Slave\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.obj\tools\clang\test\ASTMerge\struct\Output\test.c.tmp.1.ast" "C:\Buildbot\Slave\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.src\tools\clang\test\ASTMerge\struct/Inputs/struct1.c"
$ "C:/Buildbot/Slave/llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast/llvm.obj/./bin/clang.EXE" "-cc1" "-internal-isystem" "C:\Buildbot\Slave\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.obj\lib\clang\5.0.0\include" "-nostdsysteminc" "-emit-pch" "-o" "C:\Buildbot\Slave\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.obj\tools\clang\test\ASTMerge\struct\Output\test.c.tmp.2.ast" "C:\Buildbot\Slave\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.src\tools\clang\test\ASTMerge\struct/Inputs/struct2.c"
$ "not" "C:/Buildbot/Slave/llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast/llvm.obj/./bin/clang.EXE" "-cc1" "-internal-isystem" "C:\Buildbot\Slave\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.obj\lib\clang\5.0.0\include" "-nostdsysteminc" "-ast-merge" "C:\Buildbot\Slave\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.obj\tools\clang\test\ASTMerge\struct\Output\test.c.tmp.1.ast" "-ast-merge" "C:\Buildbot\Slave\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.obj\tools\clang\test\ASTMerge\struct\Output\test.c.tmp.2.ast" "-fsyntax-only" "C:\Buildbot\Slave\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.src\tools\clang\test\ASTMerge\struct\test.c"
$ "C:/Buildbot/Slave/llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast/llvm.obj/./bin\FileCheck.EXE" "C:\Buildbot\Slave\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.src\tools\clang\test\ASTMerge\struct\test.c"
# command stderr:
C:\Buildbot\Slave\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.src\tools\clang\test\ASTMerge\struct\test.c:47:11: error: expected string not found in input

// CHECK: struct1.c:130:7: warning: type 'struct DeepUnnamedError::(anonymous at [[PATH_TO_INPUTS:.+]]/struct1.c:130:7)' has incompatible definitions in different translation units

          ^

<stdin>:125:1: note: scanning from here

S13 x13;

^


error: command failed with exit status: 1

--

********************

Can you investigate?

Douglas Yung

> -----Original Message-----
> From: cfe-commits [mailto:cfe-commits-bounces at lists.llvm.org] On Behalf Of
> Gabor Horvath via cfe-commits
> Sent: Monday, April 03, 2017 4:57
> To: cfe-commits at lists.llvm.org
> Subject: r299355 - [ASTImporter] Fix for importing unnamed structs
> 
> Author: xazax
> Date: Mon Apr  3 06:57:11 2017
> New Revision: 299355
> 
> URL: http://llvm.org/viewvc/llvm-project?rev=299355&view=rev
> Log:
> [ASTImporter] Fix for importing unnamed structs
> 
> Patch by Peter Szecsi!
> 
> Differential Revision: https://reviews.llvm.org/D30876
> 
> Modified:
>     cfe/trunk/lib/AST/ASTImporter.cpp
>     cfe/trunk/test/ASTMerge/struct/Inputs/struct1.c
>     cfe/trunk/test/ASTMerge/struct/Inputs/struct2.c
>     cfe/trunk/test/ASTMerge/struct/test.c
> 
> Modified: cfe/trunk/lib/AST/ASTImporter.cpp
> URL: http://llvm.org/viewvc/llvm-
> project/cfe/trunk/lib/AST/ASTImporter.cpp?rev=299355&r1=299354&r2=299355&view=
> diff
> ==============================================================================
> --- cfe/trunk/lib/AST/ASTImporter.cpp (original)
> +++ cfe/trunk/lib/AST/ASTImporter.cpp Mon Apr  3 06:57:11 2017
> @@ -1221,6 +1221,10 @@ static Optional<unsigned> findUntaggedSt
>      // If the field looks like this:
>      // struct { ... } A;
>      QualType FieldType = F->getType();
> +    // In case of nested structs.
> +    while (const auto *ElabType = dyn_cast<ElaboratedType>(FieldType)) {
> +      FieldType = ElabType->getNamedType();
> +    }
>      if (const auto *RecType = dyn_cast<RecordType>(FieldType)) {
>        const RecordDecl *RecDecl = RecType->getDecl();
>        if (RecDecl->getDeclContext() == Owner && @@ -3020,9 +3024,8 @@ Decl
> *ASTNodeImporter::VisitRecordDecl(R
>        }
> 
>        if (RecordDecl *FoundRecord = dyn_cast<RecordDecl>(Found)) {
> -        if (D->isAnonymousStructOrUnion() &&
> -            FoundRecord->isAnonymousStructOrUnion()) {
> -          // If both anonymous structs/unions are in a record context, make
> sure
> +        if (!SearchName) {
> +          // If both unnamed structs/unions are in a record context,
> + make sure
>            // they occur in the same location in the context records.
>            if (Optional<unsigned> Index1
>                = findUntaggedStructOrUnionIndex(D)) {
> 
> Modified: cfe/trunk/test/ASTMerge/struct/Inputs/struct1.c
> URL: http://llvm.org/viewvc/llvm-
> project/cfe/trunk/test/ASTMerge/struct/Inputs/struct1.c?rev=299355&r1=299354&r
> 2=299355&view=diff
> ==============================================================================
> --- cfe/trunk/test/ASTMerge/struct/Inputs/struct1.c (original)
> +++ cfe/trunk/test/ASTMerge/struct/Inputs/struct1.c Mon Apr  3 06:57:11
> +++ 2017
> @@ -77,3 +77,65 @@ typedef struct {
>  } S13;
> 
>  S13 x13;
> +
> +// Matches
> +struct Unnamed {
> +  union {
> +    struct {
> +      int i;
> +    } S;
> +    struct {
> +      float i;
> +    } R;
> +  } U;
> +} x14;
> +
> +// Matches
> +struct DeepUnnamed {
> +  union {
> +    union {
> +      struct {
> +        long i;
> +      } S;
> +      struct {
> +        int i;
> +      } R;
> +    } U1;
> +    union {
> +      struct {
> +        long i;
> +      } S;
> +      struct {
> +        float i;
> +      } T;
> +    } U2;
> +  } U;
> +  struct {
> +    long i;
> +  } V;
> +} x15;
> +
> +// Mismatch due to unnamed struct used internally struct
> +DeepUnnamedError {
> +  union {
> +    union {
> +      struct {
> +        long i;
> +      } S;
> +      struct {
> +        int i;
> +      } R;
> +    } U1;
> +    union {
> +      struct {
> +        long i; // Mismatch here.
> +      } S;
> +      struct {
> +        float i;
> +      } T;
> +    } U2;
> +  } U;
> +  struct {
> +    long i;
> +  } V;
> +} x16;
> 
> Modified: cfe/trunk/test/ASTMerge/struct/Inputs/struct2.c
> URL: http://llvm.org/viewvc/llvm-
> project/cfe/trunk/test/ASTMerge/struct/Inputs/struct2.c?rev=299355&r1=299354&r
> 2=299355&view=diff
> ==============================================================================
> --- cfe/trunk/test/ASTMerge/struct/Inputs/struct2.c (original)
> +++ cfe/trunk/test/ASTMerge/struct/Inputs/struct2.c Mon Apr  3 06:57:11
> +++ 2017
> @@ -74,3 +74,65 @@ typedef struct {
>  } S13;
> 
>  S13 x13;
> +
> +// Matches
> +struct Unnamed {
> +  union {
> +    struct {
> +      int i;
> +    } S;
> +    struct {
> +      float i;
> +    } R;
> +  } U;
> +} x14;
> +
> +// Matches
> +struct DeepUnnamed {
> +  union {
> +    union {
> +      struct {
> +        long i;
> +      } S;
> +      struct {
> +        int i;
> +      } R;
> +    } U1;
> +    union {
> +      struct {
> +        long i;
> +      } S;
> +      struct {
> +        float i;
> +      } T;
> +    } U2;
> +  } U;
> +  struct {
> +    long i;
> +  } V;
> +} x15;
> +
> +// Mismatch due to unnamed struct used internally struct
> +DeepUnnamedError {
> +  union {
> +    union {
> +      struct {
> +        long i;
> +      } S;
> +      struct {
> +        int i;
> +      } R;
> +    } U1;
> +    union {
> +      struct {
> +        float i; // Mismatch here.
> +      } S;
> +      struct {
> +        float i;
> +      } T;
> +    } U2;
> +  } U;
> +  struct {
> +    long i;
> +  } V;
> +} x16;
> 
> Modified: cfe/trunk/test/ASTMerge/struct/test.c
> URL: http://llvm.org/viewvc/llvm-
> project/cfe/trunk/test/ASTMerge/struct/test.c?rev=299355&r1=299354&r2=299355&v
> iew=diff
> ==============================================================================
> --- cfe/trunk/test/ASTMerge/struct/test.c (original)
> +++ cfe/trunk/test/ASTMerge/struct/test.c Mon Apr  3 06:57:11 2017
> @@ -44,4 +44,12 @@
>  // CHECK: struct2.c:72:7: note: field 'i' has type 'int' here  // CHECK:
> struct2.c:76:5: error: external variable 'x13' declared with incompatible
> types in different translation units ('S13' vs. 'S13')  // CHECK:
> struct1.c:79:5: note: declared here with type 'S13'
> -// CHECK: 9 warnings and 8 errors generated
> +// CHECK: struct1.c:130:7: warning: type 'struct
> +DeepUnnamedError::(anonymous at [[PATH_TO_INPUTS:.+]]/struct1.c:130:7)'
> +has incompatible definitions in different translation units // CHECK:
> +struct1.c:131:14: note: field 'i' has type 'long' here // CHECK:
> +struct2.c:128:15: note: field 'i' has type 'float' here // CHECK:
> +struct1.c:129:5: warning: type 'union DeepUnnamedError::(anonymous at
> +[[PATH_TO_INPUTS]]/struct1.c:129:5)' has incompatible definitions in
> +different translation units // CHECK: struct1.c:132:9: note: field 'S' has
> type 'struct (anonymous struct at [[PATH_TO_INPUTS]]/struct1.c:130:7)' here //
> CHECK: struct2.c:129:9: note: field 'S' has type 'struct (anonymous struct at
> [[PATH_TO_INPUTS]]/struct2.c:127:7)' here // CHECK: struct2.c:138:3: error:
> external variable 'x16' declared with incompatible types in different
> translation units ('struct DeepUnnamedError' vs. 'struct DeepUnnamedError') //
> CHECK: struct1.c:141:3: note: declared here with type 'struct
> DeepUnnamedError'
> +// CHECK: 11 warnings and 9 errors generated
> 
> 
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


More information about the cfe-commits mailing list