diff --git a/clang/lib/Frontend/Rewrite/RewriteBSC.cpp b/clang/lib/Frontend/Rewrite/RewriteBSC.cpp index 35b3d00c23e1fb8d098d7fc1b661045b9f9c966b..cba38098948d90ab3ccb4b3291aa7d6c4fad4e52 100644 --- a/clang/lib/Frontend/Rewrite/RewriteBSC.cpp +++ b/clang/lib/Frontend/Rewrite/RewriteBSC.cpp @@ -34,11 +34,15 @@ public: addNode(dependency); } - void addNode(RecordDecl *RD) { nodes.insert(RD); } + // recording appear index + void addNode(RecordDecl *RD) { + nodes.insert({RD, nodes.size()}); + } std::vector topologicalSort() { std::map inDegree; - for (RecordDecl *node : nodes) { + for (auto &entry : nodes) { + RecordDecl *node = entry.first; inDegree[node] = 0; } for (auto &entry : typeDependencyMap) { @@ -47,7 +51,13 @@ public: } } - std::queue zeroInDegree; + auto cmp = [this](RecordDecl *A, RecordDecl *B) { + return nodes.at(A) > nodes.at(B); + }; + + std::priority_queue, decltype(cmp)> + zeroInDegree(cmp); + for (auto &entry : inDegree) { if (entry.second == 0) { zeroInDegree.push(entry.first); @@ -56,7 +66,7 @@ public: std::vector sorted; while (!zeroInDegree.empty()) { - RecordDecl *current = zeroInDegree.front(); + RecordDecl *current = zeroInDegree.top(); zeroInDegree.pop(); sorted.push_back(current); @@ -81,7 +91,8 @@ private: // For a struct S, which has a field of struct T, the S depends on T, so we // use T as the key and add S to its value. std::map> typeDependencyMap; - std::set nodes; + // map to memo the appear index + std::map nodes; }; class TypeDependencyVisitor : public DeclVisitor { @@ -93,6 +104,9 @@ public: if (!RD->isThisDeclarationADefinition() || visited.count(RD)) return; + graph.addNode(RD); + visited.insert(RD); + // Traverse all fields to calculate type dependencies. for (FieldDecl *Field : RD->fields()) { QualType FieldType = Field->getType(); @@ -116,8 +130,6 @@ public: } } } - graph.addNode(RD); - visited.insert(RD); } void VisitClassTemplateDecl(ClassTemplateDecl *CTD) { diff --git a/clang/test/BSC/Positive/Driver/rewrite-bsc/Generic/rewrite_bsc_generic_12/rewrite_bsc_generic_12.cbs b/clang/test/BSC/Positive/Driver/rewrite-bsc/Generic/rewrite_bsc_generic_12/rewrite_bsc_generic_12.cbs index 5367e6d8159c7ddda00fe2f54914014b38658b29..f4967a5083c121781d2c896367719292d2af62a7 100644 --- a/clang/test/BSC/Positive/Driver/rewrite-bsc/Generic/rewrite_bsc_generic_12/rewrite_bsc_generic_12.cbs +++ b/clang/test/BSC/Positive/Driver/rewrite-bsc/Generic/rewrite_bsc_generic_12/rewrite_bsc_generic_12.cbs @@ -82,6 +82,10 @@ int main() { return 0; } // CHECK-NEXT: int value; // CHECK-NEXT: }; // CHECK-EMPTY: +// CHECK-NEXT: struct B { +// CHECK-NEXT: struct A_int a; +// CHECK-NEXT: }; +// CHECK-EMPTY: // CHECK-NEXT: struct C { // CHECK-NEXT: struct A_int *a; // CHECK-NEXT: }; @@ -94,10 +98,6 @@ int main() { return 0; } // CHECK-NEXT: struct A_int *a; // CHECK-NEXT: }; // CHECK-EMPTY: -// CHECK-NEXT: struct B { -// CHECK-NEXT: struct A_int a; -// CHECK-NEXT: }; -// CHECK-EMPTY: // CHECK-NEXT: struct A_int a; // CHECK-EMPTY: // CHECK-NEXT: struct A_int *b; diff --git a/clang/test/BSC/Positive/Driver/rewrite-bsc/Generic/rewrite_bsc_generic_15/rewrite_bsc_generic_15.cbs b/clang/test/BSC/Positive/Driver/rewrite-bsc/Generic/rewrite_bsc_generic_15/rewrite_bsc_generic_15.cbs index fde8608314d514db6d0393d3a7582fc8d0502861..14723d0f4e6d69517d15d77eaca2aa6b6611f522 100644 --- a/clang/test/BSC/Positive/Driver/rewrite-bsc/Generic/rewrite_bsc_generic_15/rewrite_bsc_generic_15.cbs +++ b/clang/test/BSC/Positive/Driver/rewrite-bsc/Generic/rewrite_bsc_generic_15/rewrite_bsc_generic_15.cbs @@ -24,18 +24,19 @@ int main() { return 0; } -// CHECK: struct S1 { + +// CHECK: struct S3_struct_S1_P { +// CHECK-NEXT: struct S1 *t; // CHECK-NEXT: }; // CHECK-EMPTY: -// CHECK-NEXT: struct S2 { +// CHECK-NEXT: struct S4_struct_S3_struct_S1_P { +// CHECK-NEXT: struct S3_struct_S1_P u; // CHECK-NEXT: }; // CHECK-EMPTY: -// CHECK-NEXT: struct S3_struct_S1_P { -// CHECK-NEXT: struct S1 *t; +// CHECK-NEXT: struct S1 { // CHECK-NEXT: }; // CHECK-EMPTY: -// CHECK-NEXT: struct S4_struct_S3_struct_S1_P { -// CHECK-NEXT: struct S3_struct_S1_P u; +// CHECK-NEXT: struct S2 { // CHECK-NEXT: }; // CHECK-EMPTY: // CHECK-NEXT: void test(struct S4_struct_S3_struct_S1_P s) { diff --git a/clang/test/BSC/Positive/Driver/rewrite-bsc/Generic/rewrite_bsc_generic_7/rewrite_bsc_generic_7.cbs b/clang/test/BSC/Positive/Driver/rewrite-bsc/Generic/rewrite_bsc_generic_7/rewrite_bsc_generic_7.cbs index e9d41780bf1fe4d4f79dbfd383ef53def1e873c4..67b6be95700aa866b439e742dd5f2dc9b5b1e1b0 100644 --- a/clang/test/BSC/Positive/Driver/rewrite-bsc/Generic/rewrite_bsc_generic_7/rewrite_bsc_generic_7.cbs +++ b/clang/test/BSC/Positive/Driver/rewrite-bsc/Generic/rewrite_bsc_generic_7/rewrite_bsc_generic_7.cbs @@ -43,13 +43,13 @@ int main() { // CHECK: struct B {}; // CHECK-EMPTY: -// CHECK-NEXT: struct Goo_struct_B_struct_B { +// CHECK-NEXT: struct Foo_struct_B { // CHECK-NEXT: struct B a; -// CHECK-NEXT: struct B b; // CHECK-NEXT: }; // CHECK-EMPTY: -// CHECK-NEXT: struct Foo_struct_B { +// CHECK-NEXT: struct Goo_struct_B_struct_B { // CHECK-NEXT: struct B a; +// CHECK-NEXT: struct B b; // CHECK-NEXT: }; // CHECK-EMPTY: // CHECK-NEXT: static struct Foo_struct_B max_struct_B(struct B a, struct Foo_struct_B foo); diff --git a/clang/test/BSC/Positive/Driver/rewrite-bsc/Generic/rewrite_bsc_generic_8/rewrite_bsc_generic_8.cbs b/clang/test/BSC/Positive/Driver/rewrite-bsc/Generic/rewrite_bsc_generic_8/rewrite_bsc_generic_8.cbs index a036ed66543955272b0ee10c7c769d28823b0534..2f20367bec22e2574751712974edfd5359febf6d 100644 --- a/clang/test/BSC/Positive/Driver/rewrite-bsc/Generic/rewrite_bsc_generic_8/rewrite_bsc_generic_8.cbs +++ b/clang/test/BSC/Positive/Driver/rewrite-bsc/Generic/rewrite_bsc_generic_8/rewrite_bsc_generic_8.cbs @@ -27,6 +27,10 @@ int main() {}; // CHECK: struct PollResult_int { // CHECK-NEXT: }; // CHECK-EMPTY: +// CHECK-NEXT: struct A { +// CHECK-NEXT: struct PollResult_int a; +// CHECK-NEXT: }; +// CHECK-EMPTY: // CHECK-NEXT: struct B { // CHECK-EMPTY: // CHECK-NEXT: }; @@ -35,8 +39,4 @@ int main() {}; // CHECK-NEXT: struct PollResult_int a; // CHECK-NEXT: }; // CHECK-EMPTY: -// CHECK-NEXT: struct A { -// CHECK-NEXT: struct PollResult_int a; -// CHECK-NEXT: }; -// CHECK-EMPTY: // CHECK-NEXT: int main() {} diff --git a/clang/test/BSC/Positive/Driver/rewrite-bsc/Generic/rewrite_bsc_generic_struct_with_header/rewrite_bsc_generic_struct_with_header.cbs b/clang/test/BSC/Positive/Driver/rewrite-bsc/Generic/rewrite_bsc_generic_struct_with_header/rewrite_bsc_generic_struct_with_header.cbs index 9ecb7682e0b4f9a0040e66714ba95bf625afedd1..2a94bbd0a96a6969fdbeb8f3856cb0d642c4a2be 100644 --- a/clang/test/BSC/Positive/Driver/rewrite-bsc/Generic/rewrite_bsc_generic_struct_with_header/rewrite_bsc_generic_struct_with_header.cbs +++ b/clang/test/BSC/Positive/Driver/rewrite-bsc/Generic/rewrite_bsc_generic_struct_with_header/rewrite_bsc_generic_struct_with_header.cbs @@ -27,18 +27,18 @@ int main() { // CHECK-NEXT: int a; // CHECK-NEXT: }; // CHECK-EMPTY: -// CHECK-NEXT: struct LinkedList_struct_S { -// CHECK-NEXT: struct _BSC_ListNode_struct_S *head; -// CHECK-NEXT: struct _BSC_ListNode_struct_S *tail; -// CHECK-NEXT: size_t len; -// CHECK-NEXT: }; -// CHECK-EMPTY: // CHECK-NEXT: struct _BSC_ListNode_struct_S { // CHECK-NEXT: struct _BSC_ListNode_struct_S *next; // CHECK-NEXT: struct _BSC_ListNode_struct_S *prev; // CHECK-NEXT: struct S element; // CHECK-NEXT: }; // CHECK-EMPTY: +// CHECK-NEXT: struct LinkedList_struct_S { +// CHECK-NEXT: struct _BSC_ListNode_struct_S *head; +// CHECK-NEXT: struct _BSC_ListNode_struct_S *tail; +// CHECK-NEXT: size_t len; +// CHECK-NEXT: }; +// CHECK-EMPTY: // CHECK-NEXT: static struct _BSC_ListNode_struct_S *struct__BSC_ListNode_struct_S_new(struct S el); // CHECK-EMPTY: // CHECK-NEXT: static struct LinkedList_struct_S struct_LinkedList_struct_S_new(void); diff --git a/clang/test/BSC/Positive/Driver/rewrite-bsc/Generic/rewrite_bsc_generic_with_header_2/rewrite_bsc_generic_with_header_2.cbs b/clang/test/BSC/Positive/Driver/rewrite-bsc/Generic/rewrite_bsc_generic_with_header_2/rewrite_bsc_generic_with_header_2.cbs index bd5a9d760c7aad8c82a28d8cd45ef274b12e4a83..4089fcea9e3f12b1713dcc2e7890baa6da0a96ee 100644 --- a/clang/test/BSC/Positive/Driver/rewrite-bsc/Generic/rewrite_bsc_generic_with_header_2/rewrite_bsc_generic_with_header_2.cbs +++ b/clang/test/BSC/Positive/Driver/rewrite-bsc/Generic/rewrite_bsc_generic_with_header_2/rewrite_bsc_generic_with_header_2.cbs @@ -48,14 +48,14 @@ int main() { // CHECK-NEXT: struct G_int { // CHECK-NEXT: }; // CHECK-EMPTY: -// CHECK-NEXT: struct B { -// CHECK-NEXT: struct A **a; -// CHECK-NEXT: }; -// CHECK-EMPTY: // CHECK-NEXT: struct A { // CHECK-NEXT: struct G_int g; // CHECK-NEXT: }; // CHECK-EMPTY: +// CHECK-NEXT: struct B { +// CHECK-NEXT: struct A **a; +// CHECK-NEXT: }; +// CHECK-EMPTY: // CHECK-NEXT: static struct S_int_char *newS_int_char(int a); // CHECK-EMPTY: // CHECK-NEXT: struct S_int_char b; diff --git a/clang/test/BSC/Positive/Driver/rewrite-bsc/Generic/rewrite_bsc_generic_with_header_3/rewrite_bsc_generic_with_header_3.cbs b/clang/test/BSC/Positive/Driver/rewrite-bsc/Generic/rewrite_bsc_generic_with_header_3/rewrite_bsc_generic_with_header_3.cbs index b46d2e12d276dfccea36313c3f95725e17ac05e5..0aa8e71ed82c8f1c103d9329b2cd401c7716f173 100644 --- a/clang/test/BSC/Positive/Driver/rewrite-bsc/Generic/rewrite_bsc_generic_with_header_3/rewrite_bsc_generic_with_header_3.cbs +++ b/clang/test/BSC/Positive/Driver/rewrite-bsc/Generic/rewrite_bsc_generic_with_header_3/rewrite_bsc_generic_with_header_3.cbs @@ -85,16 +85,11 @@ int main() { // CHECK-NEXT: ANONDIGIT_END // CHECK-NEXT: }; // CHECK-EMPTY: -// CHECK-NEXT: struct UserHBSStruct { -// CHECK-NEXT: int a; -// CHECK-NEXT: int b; -// CHECK-NEXT: }; -// CHECK-EMPTY: // CHECK-NEXT: struct BSCGenericStruct_int { // CHECK-NEXT: int t; // CHECK-NEXT: }; // CHECK-EMPTY: -// CHECK-NEXT: struct CBSStruct { +// CHECK-NEXT: struct UserHBSStruct { // CHECK-NEXT: int a; // CHECK-NEXT: int b; // CHECK-NEXT: }; @@ -103,6 +98,11 @@ int main() { // CHECK-NEXT: TBSCGSI a; // CHECK-NEXT: }; // CHECK-EMPTY: +// CHECK-NEXT: struct CBSStruct { +// CHECK-NEXT: int a; +// CHECK-NEXT: int b; +// CHECK-NEXT: }; +// CHECK-EMPTY: // CHECK-NEXT: static struct BSCGenericStruct_int init_int(int t); // CHECK-EMPTY: // CHECK-NEXT: int x = 1; diff --git a/clang/test/BSC/Positive/Driver/rewrite-bsc/Ownership/rewrite_bsc_owned3/rewrite_bsc_owned3.cbs b/clang/test/BSC/Positive/Driver/rewrite-bsc/Ownership/rewrite_bsc_owned3/rewrite_bsc_owned3.cbs index 0cdf6c057da6d387f91ee47dfddaef5bc57944a7..d25bc30c3301b36cfffb69ec2b3c99e732c05141 100644 --- a/clang/test/BSC/Positive/Driver/rewrite-bsc/Ownership/rewrite_bsc_owned3/rewrite_bsc_owned3.cbs +++ b/clang/test/BSC/Positive/Driver/rewrite-bsc/Ownership/rewrite_bsc_owned3/rewrite_bsc_owned3.cbs @@ -104,6 +104,10 @@ int main() { // CHECK-NEXT: int **c; // CHECK-NEXT: }; // CHECK-EMPTY: +// CHECK-NEXT: struct D { +// CHECK-NEXT: struct C c; +// CHECK-NEXT: }; +// CHECK-EMPTY: // CHECK-NEXT: struct E { // CHECK-NEXT: int e; // CHECK-NEXT: }; @@ -120,10 +124,6 @@ int main() { // CHECK-NEXT: int * *h; // CHECK-NEXT: }; // CHECK-EMPTY: -// CHECK-NEXT: struct D { -// CHECK-NEXT: struct C c; -// CHECK-NEXT: }; -// CHECK-EMPTY: // CHECK-NEXT: int (a)(void); // CHECK-EMPTY: // CHECK-NEXT: int *(b)(void); diff --git a/clang/test/BSC/Positive/Driver/rewrite-bsc/rewrite_bsc_type_dependency_3/rewrite_bsc_type_dependency_3.cbs b/clang/test/BSC/Positive/Driver/rewrite-bsc/rewrite_bsc_type_dependency_3/rewrite_bsc_type_dependency_3.cbs index 463355c703186168d1169d0ba4dc8fa3173966b9..9075889113ee103356b803cb66d65a89158bea77 100644 --- a/clang/test/BSC/Positive/Driver/rewrite-bsc/rewrite_bsc_type_dependency_3/rewrite_bsc_type_dependency_3.cbs +++ b/clang/test/BSC/Positive/Driver/rewrite-bsc/rewrite_bsc_type_dependency_3/rewrite_bsc_type_dependency_3.cbs @@ -60,18 +60,19 @@ int main() { return 0; } -// CHECK: struct RawVec_int { -// CHECK-NEXT: int *ptr; -// CHECK-NEXT: int cap; -// CHECK-NEXT: }; -// CHECK-EMPTY: -// CHECK-NEXT: struct LinkedList_struct_Vec_int { +// CHECK: struct LinkedList_struct_Vec_int { // CHECK-NEXT: struct _BSC_ListNode_struct_Vec_int *head; // CHECK-NEXT: struct _BSC_ListNode_struct_Vec_int *tail; // CHECK-NEXT: int len; // CHECK-NEXT: }; // CHECK-EMPTY: +// CHECK-NEXT: struct RawVec_int { +// CHECK-NEXT: int *ptr; +// CHECK-NEXT: int cap; +// CHECK-NEXT: }; +// CHECK-EMPTY: // CHECK-NEXT: struct Vec_int { -// CHECK-NEXT: struct RawVec_int buf; +// CHECK-NEXT: struct RawVec_int buf; // CHECK-NEXT: int len; -// CHECK-NEXT: }; \ No newline at end of file +// CHECK-NEXT: }; + diff --git a/clang/test/BSC/Positive/Driver/rewrite-bsc/rewrite_bsc_type_dependency_4/rewrite_bsc_type_dependency_4.cbs b/clang/test/BSC/Positive/Driver/rewrite-bsc/rewrite_bsc_type_dependency_4/rewrite_bsc_type_dependency_4.cbs index 861571bade9e76af9a33411b1d68cf0eb9f4b33f..2fdc3c70e474e5ab9f4f8f6c19cb0a8f1dd9f55d 100644 --- a/clang/test/BSC/Positive/Driver/rewrite-bsc/rewrite_bsc_type_dependency_4/rewrite_bsc_type_dependency_4.cbs +++ b/clang/test/BSC/Positive/Driver/rewrite-bsc/rewrite_bsc_type_dependency_4/rewrite_bsc_type_dependency_4.cbs @@ -32,13 +32,13 @@ int main() { // CHECK-EMPTY: // CHECK-NEXT: typedef struct EQueueFunc EQueueFunc; // CHECK-EMPTY: -// CHECK-NEXT: struct S {}; -// CHECK-EMPTY: // CHECK-NEXT: struct __Trait_F_int { // CHECK-NEXT: void *data; // CHECK-NEXT: struct __Trait_F_Vtable_int *vtable; // CHECK-NEXT: }; // CHECK-EMPTY: +// CHECK-NEXT: struct S {}; +// CHECK-EMPTY: // CHECK-NEXT: struct EQueueFunc { // CHECK-NEXT: pollFunc func; // CHECK-NEXT: }; diff --git a/clang/test/BSC/Positive/Driver/rewrite-bsc/rewrite_bsc_typedef/rewrite_bsc_typedef.cbs b/clang/test/BSC/Positive/Driver/rewrite-bsc/rewrite_bsc_typedef/rewrite_bsc_typedef.cbs index 68e28ca2aaf8a4a34d69c395d9a93f0de6f483e0..374d92855ca56046466698f967dc2cc6cfc41db6 100644 --- a/clang/test/BSC/Positive/Driver/rewrite-bsc/rewrite_bsc_typedef/rewrite_bsc_typedef.cbs +++ b/clang/test/BSC/Positive/Driver/rewrite-bsc/rewrite_bsc_typedef/rewrite_bsc_typedef.cbs @@ -37,14 +37,14 @@ int main() { // CHECK-NEXT: struct S_int { // CHECK-NEXT: }; // CHECK-EMPTY: -// CHECK-NEXT: union _TD_MyUnion { -// CHECK-NEXT: int a; -// CHECK-NEXT: }; -// CHECK-EMPTY: // CHECK-NEXT: struct _TD_MyStruct { // CHECK-NEXT: struct S_int a; // CHECK-NEXT: }; // CHECK-EMPTY: +// CHECK-NEXT: union _TD_MyUnion { +// CHECK-NEXT: int a; +// CHECK-NEXT: }; +// CHECK-EMPTY: // CHECK-NEXT: int main() { // CHECK-NEXT: return 0; // CHECK-NEXT: } diff --git a/clang/test/BSC/Positive/Driver/rewrite-bsc/rewrite_nest_stru_def_ord/test1.cbs b/clang/test/BSC/Positive/Driver/rewrite-bsc/rewrite_nest_stru_def_ord/test1.cbs new file mode 100644 index 0000000000000000000000000000000000000000..2ba778336efbf7bf7636d681f5a6aaec719eec57 --- /dev/null +++ b/clang/test/BSC/Positive/Driver/rewrite-bsc/rewrite_nest_stru_def_ord/test1.cbs @@ -0,0 +1,129 @@ +// RUN: %clang -rewrite-bsc %s -o %t-rw.c +// RUN: FileCheck --input-file=%t-rw.c %s +// RUN: %clang %t-rw.c -o %t-rw.output +// RUN: %t-rw.output + + +struct A{ + int a; +}; + +struct B{ + struct A a; +}; + +struct C{ + struct A a; +}; + +struct D{ + struct A a; +}; + +struct E{ + struct A a; +}; + +struct F{ + struct A a; +}; + +struct G{ + struct A a; +}; + +struct H{ + struct A a; +}; + +struct I{ + struct A a; +}; + +struct J{ + struct A a; +}; + +struct K{ + struct A a; +}; + +struct L{ + struct A a; +}; + +struct M{ + struct A a; +}; + +struct out{ + struct A a; + struct B b; + struct C c; + struct D d; + struct E e; + struct F f ; + struct G g; + struct H h; + struct I i; + struct J j; + struct K k; + struct L l; + struct M m; +}; + +int main(){ + struct out o = {}; + return 0; +} +// CHECK: struct A{ +// CHECK-NEXT: int a; +// CHECK-NEXT: }; +// CHECK-EMPTY: +// CHECK-NEXT: struct B{ +// CHECK-NEXT: struct A a; +// CHECK-NEXT: }; +// CHECK-EMPTY: +// CHECK-NEXT: struct C{ +// CHECK-NEXT: struct A a; +// CHECK-NEXT: }; +// CHECK-EMPTY: +// CHECK-NEXT: struct D{ +// CHECK-NEXT: struct A a; +// CHECK-NEXT: }; +// CHECK-EMPTY: +// CHECK-NEXT: struct E{ +// CHECK-NEXT: struct A a; +// CHECK-NEXT: }; +// CHECK-EMPTY: +// CHECK-NEXT: struct F{ +// CHECK-NEXT: struct A a; +// CHECK-NEXT: }; +// CHECK-EMPTY: +// CHECK-NEXT: struct G{ +// CHECK-NEXT: struct A a; +// CHECK-NEXT: }; +// CHECK-EMPTY: +// CHECK-NEXT: struct H{ +// CHECK-NEXT: struct A a; +// CHECK-NEXT: }; +// CHECK-EMPTY: +// CHECK-NEXT: struct I{ +// CHECK-NEXT: struct A a; +// CHECK-NEXT: }; +// CHECK-EMPTY: +// CHECK-NEXT: struct J{ +// CHECK-NEXT: struct A a; +// CHECK-NEXT: }; +// CHECK-EMPTY: +// CHECK-NEXT: struct K{ +// CHECK-NEXT: struct A a; +// CHECK-NEXT: }; +// CHECK-EMPTY: +// CHECK-NEXT: struct L{ +// CHECK-NEXT: struct A a; +// CHECK-NEXT: }; +// CHECK-EMPTY: +// CHECK-NEXT: struct M{ +// CHECK-NEXT: struct A a; +// CHECK-NEXT: }; \ No newline at end of file diff --git a/clang/test/BSC/Positive/Generic/GenericTypeMethods/generic_trait_param/generic_trait_param.cbs b/clang/test/BSC/Positive/Generic/GenericTypeMethods/generic_trait_param/generic_trait_param.cbs index b6ed2af0da12a43a56ca38f0baf00cd65558570d..32480f6861c3a44f80930c16c8b1e0eb47f34915 100644 --- a/clang/test/BSC/Positive/Generic/GenericTypeMethods/generic_trait_param/generic_trait_param.cbs +++ b/clang/test/BSC/Positive/Generic/GenericTypeMethods/generic_trait_param/generic_trait_param.cbs @@ -24,15 +24,14 @@ int main() { struct A::foo(&s, future); return 0; } - -// CHECK: struct A_void_P { -// CHECK-NEXT: }; -// CHECK-EMPTY: -// CHECK-NEXT: struct __Trait_Future_void_P { +// CHECK: struct __Trait_Future_void_P { // CHECK-NEXT: void *data; // CHECK-NEXT: struct __Trait_Future_Vtable_void_P *vtable; // CHECK-NEXT: }; // CHECK-EMPTY: +// CHECK-NEXT: struct A_void_P { +// CHECK-NEXT: }; +// CHECK-EMPTY: // CHECK-NEXT: static void struct_A_void_P_foo(struct A_void_P *this, struct __Trait_Future_void_P future); // CHECK-EMPTY: // CHECK-NEXT: int main(void) { diff --git a/clang/test/BSC/Positive/OperatorOverload/Subscript/Subscript.cbs b/clang/test/BSC/Positive/OperatorOverload/Subscript/Subscript.cbs index b2630f15530d3008641e788ca70008eaf81edc55..54d8f7bd984eb57bef2cbbba0696c4d01331e784 100644 --- a/clang/test/BSC/Positive/OperatorOverload/Subscript/Subscript.cbs +++ b/clang/test/BSC/Positive/OperatorOverload/Subscript/Subscript.cbs @@ -182,41 +182,40 @@ int main() { // CHECK-NEXT: int a; // CHECK-NEXT: }; // CHECK-EMPTY: -// CHECK: struct G { -// CHECK-NEXT: int a; -// CHECK-NEXT: }; -// CHECK-EMPTY: -// CHECK: struct I { -// CHECK-NEXT: int a; +// CHECK: struct F { +// CHECK-NEXT: struct E e[10]; // CHECK-NEXT: }; // CHECK-EMPTY: -// CHECK: struct K { +// CHECK: struct G { // CHECK-NEXT: int a; // CHECK-NEXT: }; // CHECK-EMPTY: -// CHECK: struct Data_int { -// CHECK-NEXT: int data; -// CHECK-NEXT: }; -// CHECK-EMPTY: -// CHECK: struct F { -// CHECK-NEXT: struct E e[10]; -// CHECK-NEXT: }; -// CHECK-EMPTY: // CHECK: struct H { // CHECK-NEXT: struct G g[10]; // CHECK-NEXT: int b; // CHECK-NEXT: }; // CHECK-EMPTY: +// CHECK: struct I { +// CHECK-NEXT: int a; +// CHECK-NEXT: }; +// CHECK-EMPTY: // CHECK: struct J { // CHECK-NEXT: struct I i[10]; // CHECK-NEXT: int b; // CHECK-NEXT: }; +// CHECK: struct K { +// CHECK-NEXT: int a; +// CHECK-NEXT: }; // CHECK-EMPTY: // CHECK: struct L { // CHECK-NEXT: struct K g[10]; // CHECK-NEXT: int b; // CHECK-NEXT: }; // CHECK-EMPTY: +// CHECK: struct Data_int { +// CHECK-NEXT: int data; +// CHECK-NEXT: }; +// CHECK-EMPTY: // CHECK: struct DataArray_int { // CHECK-NEXT: struct Data_int array[10]; // CHECK-NEXT: }; diff --git a/clang/test/BSC/Positive/OperatorOverload/deref/deref.cbs b/clang/test/BSC/Positive/OperatorOverload/deref/deref.cbs index e73b847fa9c69d78ce49d6fcbf20c19dbd09bb9a..e1e98cefb1fc9bf75f1699a66b40962e0d634c0c 100644 --- a/clang/test/BSC/Positive/OperatorOverload/deref/deref.cbs +++ b/clang/test/BSC/Positive/OperatorOverload/deref/deref.cbs @@ -167,33 +167,41 @@ int main() { // CHECK-NEXT: struct RcData_int; // CHECK-NEXT: struct Rc_int; // CHECK-NEXT: struct RcRecord_int; -// CHECK-DAG: struct E { -// CHECK-DAG-NEXT: int a; -// CHECK-DAG-NEXT: }; -// CHECK-DAG: struct G { -// CHECK-DAG-NEXT: int a; -// CHECK-DAG-NEXT: }; -// CHECK-DAG: struct I { -// CHECK-DAG-NEXT: int a; -// CHECK-DAG-NEXT: }; -// CHECK-DAG: struct Rc_int { -// CHECK-DAG-NEXT: struct RcData_int *ptr; -// CHECK-DAG-NEXT: }; -// CHECK-DAG: struct RcData_int { -// CHECK-DAG-NEXT: int data; -// CHECK-DAG-NEXT: }; -// CHECK-DAG: struct F { -// CHECK-DAG-NEXT: struct E e; -// CHECK-DAG-NEXT: }; -// CHECK-DAG: struct H { -// CHECK-DAG-NEXT: struct G g; -// CHECK-DAG-NEXT: int b; -// CHECK-DAG-NEXT: }; -// CHECK-DAG: struct J { -// CHECK-DAG-NEXT: struct I i; -// CHECK-DAG-NEXT: int b; -// CHECK-DAG-NEXT: }; -// CHECK: struct RcRecord_int { +// CHECK-NEXT: struct E { +// CHECK-NEXT: int a; +// CHECK-NEXT: }; +// CHECK-EMPTY: +// CHECK-NEXT: struct F { +// CHECK-NEXT: struct E e; +// CHECK-NEXT: }; +// CHECK-EMPTY: +// CHECK-NEXT: struct G { +// CHECK-NEXT: int a; +// CHECK-NEXT: }; +// CHECK-EMPTY: +// CHECK-NEXT: struct H { +// CHECK-NEXT: struct G g; +// CHECK-NEXT: int b; +// CHECK-NEXT: }; +// CHECK-EMPTY: +// CHECK-NEXT: struct I { +// CHECK-NEXT: int a; +// CHECK-NEXT: }; +// CHECK-EMPTY: +// CHECK-NEXT: struct J { +// CHECK-NEXT: struct I i; +// CHECK-NEXT: int b; +// CHECK-NEXT: }; +// CHECK-EMPTY: +// CHECK-NEXT: struct RcData_int { +// CHECK-NEXT: int data; +// CHECK-NEXT: }; +// CHECK-EMPTY: +// CHECK-NEXT: struct Rc_int { +// CHECK-NEXT: struct RcData_int *ptr; +// CHECK-NEXT: }; +// CHECK-EMPTY: +// CHECK-NEXT: struct RcRecord_int { // CHECK-NEXT: struct Rc_int rc; // CHECK-NEXT: }; // CHECK-EMPTY: diff --git a/clang/test/BSC/Positive/OperatorOverload/member_ref/member_ref.cbs b/clang/test/BSC/Positive/OperatorOverload/member_ref/member_ref.cbs index eb67c744f55af603a86f50aa625a1c6f2eacc0c7..c77da3b1ed94194ffe42ab27f02afb0d134861e3 100644 --- a/clang/test/BSC/Positive/OperatorOverload/member_ref/member_ref.cbs +++ b/clang/test/BSC/Positive/OperatorOverload/member_ref/member_ref.cbs @@ -224,41 +224,50 @@ int main(){ // CHECK-NEXT: struct RcData_int; // CHECK-NEXT: struct Rc_int; // CHECK-NEXT: struct RcRecord_int; -// CHECK-DAG: struct A { -// CHECK-DAG-NEXT: int m; -// CHECK-DAG-NEXT: }; -// CHECK-DAG: struct AP { -// CHECK-DAG-NEXT: struct A *a; -// CHECK-DAG-NEXT: }; -// CHECK-DAG-: struct B { -// CHECK-DAG--NEXT: int x; -// CHECK-DAG--NEXT: int y; -// CHECK-DAG--NEXT: }; -// CHECK-DAG: struct BP { -// CHECK-DAG-NEXT: struct A *a; -// CHECK-DAG-NEXT: struct B *b; -// CHECK-DAG-NEXT: }; -// CHECK-DAG: struct CP { -// CHECK-DAG-NEXT: struct A * a; -// CHECK-DAG-NEXT: }; -// CHECK-DAG: struct DP { -// CHECK-DAG-NEXT: struct A * a; -// CHECK-DAG-NEXT: }; -// CHECK-DAG: struct FP { -// CHECK-DAG-NEXT: struct A* a; -// CHECK-DAG-NEXT: }; -// CHECK-DAG: struct Rc_int { -// CHECK-DAG-NEXT: struct RcData_int *ptr; -// CHECK-DAG-NEXT: }; -// CHECK-DAG: struct RcData_int { -// CHECK-DAG-NEXT: int data; -// CHECK-DAG-NEXT: }; -// CHECK: struct GP { +// CHECK: struct A { +// CHECK-NEXT: int m; +// CHECK-NEXT: }; +// CHECK-EMPTY: +// CHECK-NEXT: struct AP { +// CHECK-NEXT: struct A *a; +// CHECK-NEXT: }; +// CHECK-EMPTY: +// CHECK-NEXT: struct B { +// CHECK-NEXT: int x; +// CHECK-NEXT: int y; +// CHECK-NEXT: }; +// CHECK-EMPTY: +// CHECK-NEXT: struct BP { +// CHECK-NEXT: struct A *a; +// CHECK-NEXT: struct B *b; +// CHECK-NEXT: }; +// CHECK-EMPTY: +// CHECK-NEXT: struct CP { +// CHECK-NEXT: struct A * a; +// CHECK-NEXT: }; +// CHECK-EMPTY: +// CHECK-NEXT: struct DP { +// CHECK-NEXT: struct A * a; +// CHECK-NEXT: }; +// CHECK-EMPTY: +// CHECK-NEXT: struct FP { +// CHECK-NEXT: struct A* a; +// CHECK-NEXT: }; +// CHECK-EMPTY: +// CHECK-NEXT: struct GP { // CHECK-NEXT: struct FP fp; // CHECK-NEXT: }; // CHECK-EMPTY: -// CHECK: struct RcRecord_int { -// CHECK-NEXT: struct Rc_int rc; +// CHECK-NEXT: struct RcData_int { +// CHECK-NEXT: int data; +// CHECK-NEXT: }; +// CHECK-EMPTY: +// CHECK-NEXT: struct Rc_int { +// CHECK-NEXT: struct RcData_int *ptr; +// CHECK-NEXT: }; +// CHECK-EMPTY: +// CHECK-NEXT: struct RcRecord_int { +// CHECK-NEXT: struct Rc_int rc; // CHECK-NEXT: }; // CHECK-EMPTY: // CHECK: static struct Rc_int struct_Rc_int_new(int data); diff --git a/clang/test/BSC/Positive/OwnedStruct/Destructor/generic-owned-struct-as-param-destructor.cbs b/clang/test/BSC/Positive/OwnedStruct/Destructor/generic-owned-struct-as-param-destructor.cbs index ab549a9435a9217d7065f78640b203b2fc804415..5763ccebeb2563f0d596f98d42977876c617033a 100644 --- a/clang/test/BSC/Positive/OwnedStruct/Destructor/generic-owned-struct-as-param-destructor.cbs +++ b/clang/test/BSC/Positive/OwnedStruct/Destructor/generic-owned-struct-as-param-destructor.cbs @@ -57,14 +57,14 @@ int main(void) { // CHECK: struct A_int { // CHECK-NEXT: }; // CHECK-EMPTY: -// CHECK-NEXT: struct C_int { -// CHECK-NEXT: int elem; -// CHECK-NEXT: }; -// CHECK-EMPTY: // CHECK-NEXT: struct B_int { // CHECK-NEXT: struct A_int a; // CHECK-NEXT: }; // CHECK-EMPTY: +// CHECK-NEXT: struct C_int { +// CHECK-NEXT: int elem; +// CHECK-NEXT: }; +// CHECK-EMPTY: // CHECK-NEXT: static void struct_A_int_D( struct A_int this); // CHECK-EMPTY: // CHECK-NEXT: static void struct_B_int_D( struct B_int this); diff --git a/clang/test/BSC/Positive/Trait/GenericTrait/impl_trait_for_typedef/impl_trait_for_typedef.cbs b/clang/test/BSC/Positive/Trait/GenericTrait/impl_trait_for_typedef/impl_trait_for_typedef.cbs index a271bfa1aed2d266b6c8819584b60774039fc296..53308ae155d25365c82c457d79212c1e7f5b75e4 100644 --- a/clang/test/BSC/Positive/Trait/GenericTrait/impl_trait_for_typedef/impl_trait_for_typedef.cbs +++ b/clang/test/BSC/Positive/Trait/GenericTrait/impl_trait_for_typedef/impl_trait_for_typedef.cbs @@ -29,10 +29,6 @@ int main() { // CHECK: typedef struct S MyS; // CHECK-EMPTY: -// CHECK-NEXT: struct S{ -// CHECK-NEXT: int x; -// CHECK-NEXT: }; -// CHECK-EMPTY: // CHECK-NEXT: struct __Trait_F_Vtable_int { // CHECK-NEXT: int (*foo)(void *, int); // CHECK-NEXT: }; @@ -42,6 +38,10 @@ int main() { // CHECK-NEXT: struct __Trait_F_Vtable_int *vtable; // CHECK-NEXT: }; // CHECK-EMPTY: +// CHECK-NEXT: struct S{ +// CHECK-NEXT: int x; +// CHECK-NEXT: }; +// CHECK-EMPTY: // CHECK-NEXT: int struct_S_foo(struct S *this, int a) { // CHECK-NEXT: return this->x + a; // CHECK-NEXT: } diff --git a/clang/test/BSC/Positive/Trait/GenericTrait/trait_pointer_assign_and_compare_null/trait_pointer_assign_and_compare_null.cbs b/clang/test/BSC/Positive/Trait/GenericTrait/trait_pointer_assign_and_compare_null/trait_pointer_assign_and_compare_null.cbs index a66a87968edd1018ec74030bfa53fa22cd1ecd1e..4d2d4dd5ba4edeb8514b695427ff2e61c7780025 100644 --- a/clang/test/BSC/Positive/Trait/GenericTrait/trait_pointer_assign_and_compare_null/trait_pointer_assign_and_compare_null.cbs +++ b/clang/test/BSC/Positive/Trait/GenericTrait/trait_pointer_assign_and_compare_null/trait_pointer_assign_and_compare_null.cbs @@ -26,14 +26,13 @@ int main() { } return 1; } - -// CHECK: struct __Trait_Future_int { -// CHECK-NEXT: void *data; -// CHECK-NEXT: struct __Trait_Future_Vtable_int *vtable; +// CHECK: struct __Trait_Future_Vtable_int { +// CHECK-NEXT: int (*poll)(void *); // CHECK-NEXT: }; // CHECK-EMPTY: -// CHECK-NEXT: struct __Trait_Future_Vtable_int { -// CHECK-NEXT: int (*poll)(void *); +// CHECK-NEXT: struct __Trait_Future_int { +// CHECK-NEXT: void *data; +// CHECK-NEXT: struct __Trait_Future_Vtable_int *vtable; // CHECK-NEXT: }; // CHECK-EMPTY: // CHECK-NEXT: int main(void) { diff --git a/clang/test/BSC/Positive/Trait/GenericTrait/trait_struct_instance/trait_struct_instance.cbs b/clang/test/BSC/Positive/Trait/GenericTrait/trait_struct_instance/trait_struct_instance.cbs index feaace46bbe1764c8bb2a3d28af3952f1d93cc80..d9be813f7fba26529cbc2877f0498e659e34f9fd 100644 --- a/clang/test/BSC/Positive/Trait/GenericTrait/trait_struct_instance/trait_struct_instance.cbs +++ b/clang/test/BSC/Positive/Trait/GenericTrait/trait_struct_instance/trait_struct_instance.cbs @@ -27,11 +27,8 @@ int main() { return b - 10; } -// CHECK: struct S { -// CHECK-NEXT: int c; -// CHECK-NEXT: }; -// CHECK-EMPTY: -// CHECK-NEXT: struct __Trait_Future_Vtable_struct_S { + +// CHECK: struct __Trait_Future_Vtable_struct_S { // CHECK-NEXT: struct S (*poll)(void *, struct S); // CHECK-NEXT: }; // CHECK-EMPTY: @@ -40,6 +37,10 @@ int main() { // CHECK-NEXT: struct __Trait_Future_Vtable_struct_S *vtable; // CHECK-NEXT: }; // CHECK-EMPTY: +// CHECK-NEXT: struct S { +// CHECK-NEXT: int c; +// CHECK-NEXT: }; +// CHECK-EMPTY: // CHECK-NEXT: struct S int_poll(int *this, struct S a) { // CHECK-NEXT: return a; // CHECK-NEXT: }