From 76eb313ba9f44a0293d89a976695625655b2950c Mon Sep 17 00:00:00 2001 From: wuhuiquan Date: Wed, 16 Apr 2025 14:03:22 +0800 Subject: [PATCH] [build] Fix compilation errors when using clang as a compilation tool --- clang/docs/BSC/BiShengCLanguageUserManual.md | 6 +- .../clang/AST/BSC/BSCTypeProperties.td | 2 +- clang/lib/Parse/ParseStmt.cpp | 4 +- clang/lib/Sema/SemaTemplateInstantiate.cpp | 2 +- .../rewrite_bsc_type_dependency_1.cbs | 124 +++++++++--------- libcbs/CMakeLists.txt | 3 + 6 files changed, 71 insertions(+), 70 deletions(-) diff --git a/clang/docs/BSC/BiShengCLanguageUserManual.md b/clang/docs/BSC/BiShengCLanguageUserManual.md index 0b2887c3a88e..fedc62494df5 100644 --- a/clang/docs/BSC/BiShengCLanguageUserManual.md +++ b/clang/docs/BSC/BiShengCLanguageUserManual.md @@ -4785,7 +4785,7 @@ Rc 是引用计数(reference counting)的缩写,通过记录数据被引 我们通过以下的例子来学习 Rc 的使用: 假如一个班上有若干学生,他们共享一份成绩单,这份成绩记录文件就是需要被共享的数据资源,现在我们读取该文件来获取 1 号学生和 2 号学生的成绩: ```C -#incldue "rc.hbs" +#include "rc.hbs" owned struct ScoreRecord { //学生成绩记录文件 FILE *fp; @@ -4898,8 +4898,8 @@ void refcell_example() { #### Rc 和 RefCell 相结合来实现共享数据的修改 上面的读取学生成绩的案例我们只对数据进行了读操作,有了 RefCell,我们可以实现对共享数据的修改,以下例子实现了对成绩数据的读取和更新: ```C -#incldue "rc.hbs" -#incldue "cell.hbs" +#include "rc.hbs" +#include "cell.hbs" owned struct ScoreRecord { //学生成绩记录文件 FILE *fp; diff --git a/clang/include/clang/AST/BSC/BSCTypeProperties.td b/clang/include/clang/AST/BSC/BSCTypeProperties.td index 1deef3815c46..6dc6d42f12d6 100644 --- a/clang/include/clang/AST/BSC/BSCTypeProperties.td +++ b/clang/include/clang/AST/BSC/BSCTypeProperties.td @@ -11,7 +11,7 @@ let Class = TraitType in { let Class = ConditionalType in { def : Property<"CondResult", Bool> { - let Read = [{ node->getCondResult() }]; + let Read = [{ node->getCondResult() ? *node->getCondResult() : false }]; } def : Property<"CondExpr", ExprRef> { let Read = [{ node->getCondExpr() }]; diff --git a/clang/lib/Parse/ParseStmt.cpp b/clang/lib/Parse/ParseStmt.cpp index 79157417fa1d..5e61accf119b 100644 --- a/clang/lib/Parse/ParseStmt.cpp +++ b/clang/lib/Parse/ParseStmt.cpp @@ -262,9 +262,7 @@ Retry: if (Tok.isNot(tok::identifier)) goto Retry; } - - // Fall through - LLVM_FALLTHROUGH; + goto Default; } #if ENABLE_BSC diff --git a/clang/lib/Sema/SemaTemplateInstantiate.cpp b/clang/lib/Sema/SemaTemplateInstantiate.cpp index b220cdb34d2b..3aea2fe68b68 100644 --- a/clang/lib/Sema/SemaTemplateInstantiate.cpp +++ b/clang/lib/Sema/SemaTemplateInstantiate.cpp @@ -2860,7 +2860,7 @@ bool Sema::InstantiateClass(SourceLocation PointOfInstantiation, Instantiation->setInvalidDecl(); continue; } - Decl *NewMember; + Decl *NewMember = nullptr; #if ENABLE_BSC if (isa(Member) && !dyn_cast(Member)->isThisDeclarationADefinition()) { diff --git a/clang/test/BSC/Positive/Driver/rewrite-bsc/rewrite_bsc_type_dependency_1/rewrite_bsc_type_dependency_1.cbs b/clang/test/BSC/Positive/Driver/rewrite-bsc/rewrite_bsc_type_dependency_1/rewrite_bsc_type_dependency_1.cbs index d24aed94dfe1..28d0b7ed47b4 100644 --- a/clang/test/BSC/Positive/Driver/rewrite-bsc/rewrite_bsc_type_dependency_1/rewrite_bsc_type_dependency_1.cbs +++ b/clang/test/BSC/Positive/Driver/rewrite-bsc/rewrite_bsc_type_dependency_1/rewrite_bsc_type_dependency_1.cbs @@ -67,65 +67,65 @@ int main() { } -// CHECK: enum _TD_ENUM { -// CHECK-NEXT: READ, -// CHECK-NEXT: WRITE -// CHECK-NEXT: }; -// CHECK-EMPTY: -// CHECK-NEXT: typedef enum _TD_ENUM ENUM; -// CHECK-EMPTY: -// CHECK-NEXT: typedef struct _TD_S2 S2; -// CHECK-EMPTY: -// CHECK-NEXT: enum E { -// CHECK-NEXT: A, -// CHECK-NEXT: B, -// CHECK-NEXT: C -// CHECK-NEXT: }; -// CHECK-EMPTY: -// CHECK-NEXT: struct U { -// CHECK-NEXT: struct S* s[3]; -// CHECK-NEXT: int a; -// CHECK-NEXT: }; -// CHECK-EMPTY: -// CHECK-NEXT: struct S { -// CHECK-NEXT: int a; -// CHECK-NEXT: int b; -// CHECK-NEXT: }; -// CHECK-EMPTY: -// CHECK-NEXT: struct T1 { -// CHECK-NEXT: S2* p; -// CHECK-NEXT: struct S s[3][4][5]; -// CHECK-NEXT: }; -// CHECK-EMPTY: -// CHECK-NEXT: struct _TD_S2 { -// CHECK-NEXT: struct S s; -// CHECK-NEXT: struct U u; -// CHECK-NEXT: ENUM e; -// CHECK-NEXT: }; -// CHECK-EMPTY: -// CHECK-NEXT: union UU { -// CHECK-NEXT: float a; -// CHECK-NEXT: struct S s; -// CHECK-NEXT: struct U* u; -// CHECK-NEXT: int b; -// CHECK-NEXT: }; -// CHECK-EMPTY: -// CHECK-NEXT: struct Outer { -// CHECK-NEXT: int x; -// CHECK-NEXT: struct Inner { -// CHECK-NEXT: float y; -// CHECK-NEXT: struct Nested { -// CHECK-NEXT: char z; -// CHECK-NEXT: } nested; -// CHECK-NEXT: } inner; -// CHECK-NEXT: }; -// CHECK-EMPTY: -// CHECK-NEXT: struct T2 { -// CHECK-NEXT: enum E e; -// CHECK-NEXT: union { -// CHECK-NEXT: struct S s1; -// CHECK-NEXT: S2* s2; -// CHECK-NEXT: }; -// CHECK-NEXT: float a; -// CHECK-NEXT: long b; -// CHECK-NEXT: }; \ No newline at end of file +// CHECK: enum _TD_ENUM { +// CHECK-DAG: READ, +// CHECK-DAG: WRITE +// CHECK-DAG: }; + +// CHECK-DAG: typedef enum _TD_ENUM ENUM; + +// CHECK-DAG: typedef struct _TD_S2 S2; + +// CHECK-DAG: enum E { +// CHECK-DAG: A, +// CHECK-DAG: B, +// CHECK-DAG: C +// CHECK-DAG: }; + +// CHECK-DAG: struct U { +// CHECK-DAG: struct S* s[3]; +// CHECK-DAG: int a; +// CHECK-DAG: }; + +// CHECK-DAG: struct S { +// CHECK-DAG: int a; +// CHECK-DAG: int b; +// CHECK-DAG: }; + +// CHECK-DAG: struct T1 { +// CHECK-DAG: S2* p; +// CHECK-DAG: struct S s[3][4][5]; +// CHECK-DAG: }; + +// CHECK-DAG: struct _TD_S2 { +// CHECK-DAG: struct S s; +// CHECK-DAG: struct U u; +// CHECK-DAG: ENUM e; +// CHECK-DAG: }; + +// CHECK-DAG: union UU { +// CHECK-DAG: float a; +// CHECK-DAG: struct S s; +// CHECK-DAG: struct U* u; +// CHECK-DAG: int b; +// CHECK-DAG: }; + +// CHECK-DAG: struct Outer { +// CHECK-DAG: int x; +// CHECK-DAG: struct Inner { +// CHECK-DAG: float y; +// CHECK-DAG: struct Nested { +// CHECK-DAG: char z; +// CHECK-DAG: } nested; +// CHECK-DAG: } inner; +// CHECK-DAG: }; + +// CHECK-DAG: struct T2 { +// CHECK-DAG: enum E e; +// CHECK-DAG: union { +// CHECK-DAG: struct S s1; +// CHECK-DAG: S2* s2; +// CHECK-DAG: }; +// CHECK-DAG: float a; +// CHECK-DAG: long b; +// CHECK-DAG: }; \ No newline at end of file diff --git a/libcbs/CMakeLists.txt b/libcbs/CMakeLists.txt index c2c45fcf4630..92c1a90cd734 100644 --- a/libcbs/CMakeLists.txt +++ b/libcbs/CMakeLists.txt @@ -14,6 +14,9 @@ set(CMAKE_EXE_LINKER_FLAGS "-lpthread") set(CMAKE_C_COMPILER ${BSC_CLANG}) +string(REPLACE "-fcoverage-mapping" "" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}") +string(REPLACE "-fcoverage-mapping" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") + list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules") include(LLVMLibCBSRules) -- Gitee