From c963ea96dcabb5ab2cc0d93838119a8e2eec68f2 Mon Sep 17 00:00:00 2001 From: Gagandeep Singh Date: Thu, 8 Feb 2024 01:12:23 +0530 Subject: [PATCH 1/8] Revert "DEV: Added AddressOf and DereferencePointer" This reverts commit 2b42cbbb34b10d8f603d9cde6d4af9db814c74c2. --- src/libasr/ASR.asdl | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/libasr/ASR.asdl b/src/libasr/ASR.asdl index 9b4e93d..f2183e2 100644 --- a/src/libasr/ASR.asdl +++ b/src/libasr/ASR.asdl @@ -311,8 +311,6 @@ expr | DictLen(expr arg, ttype type, expr? value) | Var(symbol v) - | AddressOf(symbol v, ttype type) - | DereferencePointer(symbol v, ttype type) | FunctionParam(int param_number, ttype type, expr? value) --- used in types | ArrayConstant(expr* args, ttype type, arraystorage storage_format) From afb8d99759d90cde6b4a0f5cf584ff52b96d27ea Mon Sep 17 00:00:00 2001 From: Gagandeep Singh Date: Thu, 8 Feb 2024 01:12:43 +0530 Subject: [PATCH 2/8] Revert "DEV: Added logic for returning value of AddressOf and DereferencePointer" This reverts commit f1e3b4e0d0f3e7130d4c368ae7a12456f7e50d4d. --- src/libasr/asdl_cpp.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/libasr/asdl_cpp.py b/src/libasr/asdl_cpp.py index 43934f2..06b0647 100644 --- a/src/libasr/asdl_cpp.py +++ b/src/libasr/asdl_cpp.py @@ -2603,9 +2603,6 @@ def make_visitor(self, name, fields): elif name.endswith("Constant") or name == "IntegerBOZ": self.emit("case ASR::exprType::%s: { return f; }"\ % (name), 2, new_line=False) - elif name == "AddressOf" or name == "DereferencePointer": - self.emit("case ASR::exprType::%s: { return nullptr; }"\ - % (name), 2, new_line=False) else: self.emit("case ASR::exprType::%s: { return ((ASR::%s_t*)f)->m_value; }"\ % (name, name), 2, new_line=False) From 993dff90b2710eefd24be3e15abe7efa9dafc585 Mon Sep 17 00:00:00 2001 From: Gagandeep Singh Date: Thu, 8 Feb 2024 01:12:58 +0530 Subject: [PATCH 3/8] Revert "DEV: Handle DereferencePointer in EXPR2VAR" This reverts commit 4b37bce78744d15df961d766e1866c4f3318fb58. --- src/libasr/asr_utils.h | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/src/libasr/asr_utils.h b/src/libasr/asr_utils.h index 4219f55..b4e832f 100644 --- a/src/libasr/asr_utils.h +++ b/src/libasr/asr_utils.h @@ -210,14 +210,8 @@ static inline int extract_kind_from_ttype_t(const ASR::ttype_t* type) { static inline ASR::Variable_t* EXPR2VAR(const ASR::expr_t *f) { - if( ASR::is_a(*f) ) { - return ASR::down_cast(symbol_get_past_external( - ASR::down_cast(f)->m_v)); - } else if( ASR::is_a(*f) ) { - return ASR::down_cast(symbol_get_past_external( - ASR::down_cast(f)->m_v)); - } - return nullptr; + return ASR::down_cast(symbol_get_past_external( + ASR::down_cast(f)->m_v)); } static inline ASR::Function_t* EXPR2FUN(const ASR::expr_t *f) From afe2898c976016624860cea188c602679f28c22d Mon Sep 17 00:00:00 2001 From: Gagandeep Singh Date: Thu, 8 Feb 2024 01:13:14 +0530 Subject: [PATCH 4/8] Revert "Following changes have been made," This reverts commit b3efc00869e1059b5c34a7390fea15dd244772ec. --- src/lc/clang_ast_to_asr.cpp | 68 +++++++++++++------------------------ 1 file changed, 23 insertions(+), 45 deletions(-) diff --git a/src/lc/clang_ast_to_asr.cpp b/src/lc/clang_ast_to_asr.cpp index 68c7ecc..29569d5 100644 --- a/src/lc/clang_ast_to_asr.cpp +++ b/src/lc/clang_ast_to_asr.cpp @@ -210,17 +210,6 @@ class ClangASTtoASRVisitor: public clang::RecursiveASTVisitor(*a_value) ) { - a_value = ASRUtils::EXPR(ASR::make_Var_t(al, a_value->base.loc, - ASR::down_cast(a_value)->m_v)); - return ASR::make_Associate_t(al, a_loc, a_target, a_value); - } - - return ASR::make_Assignment_t(al, a_loc, a_target, a_value, a_overloaded); - } - void construct_program() { // Convert the main function into a program ASR::TranslationUnit_t* tu = (ASR::TranslationUnit_t*)this->tu; @@ -247,7 +236,7 @@ class ClangASTtoASRVisitor: public clang::RecursiveASTVisitor(*ASRUtils::expr_type(left)) && + ASR::is_a(*left)) || + (ASR::is_a(*ASRUtils::expr_type(right)) && + ASR::is_a(*right))); ASR::ttype_t *right_type = ASRUtils::expr_type(right); ASR::ttype_t *left_type = ASRUtils::expr_type(left); left_type = ASRUtils::extract_type(left_type); right_type = ASRUtils::extract_type(right_type); + if( no_cast ) { + int lkind = ASRUtils::extract_kind_from_ttype_t(left_type); + int rkind = ASRUtils::extract_kind_from_ttype_t(right_type); + if( left_type->type != right_type->type || lkind != rkind ) { + throw SemanticError("Casting for mismatching pointer types not supported yet.", + right_type->base.loc); + } + } // Handle presence of logical types in binary operations // by converting them into 32-bit integers. @@ -1889,7 +1890,7 @@ class ClangASTtoASRVisitor: public clang::RecursiveASTVisitorresolve_symbol("__return_var"); ASR::expr_t* return_var = ASRUtils::EXPR(ASR::make_Var_t(al, Lloc(x), return_sym)); TraverseStmt(x->getRetValue()); - tmp = make_Assignment_t_util(al, Lloc(x), return_var, ASRUtils::EXPR(tmp.get()), nullptr); + tmp = ASR::make_Assignment_t(al, Lloc(x), return_var, ASRUtils::EXPR(tmp.get()), nullptr); current_body->push_back(al, ASRUtils::STMT(tmp.get())); tmp = ASR::make_Return_t(al, Lloc(x)); is_stmt_created = true; @@ -1942,7 +1943,7 @@ class ClangASTtoASRVisitor: public clang::RecursiveASTVisitor(*var) ) { - throw std::runtime_error("Address of operator is only supported for symbols."); - } - - ASR::Var_t* var_t = ASR::down_cast(var); - tmp = ASR::make_AddressOf_t(al, Lloc(x), var_t->m_v, ASRUtils::TYPE( - ASR::make_Pointer_t(al, Lloc(x), ASRUtils::expr_type(var)))); - is_stmt_created = false; - break; - } - case clang::UnaryOperatorKind::UO_Deref: { - if( !ASR::is_a(*var) ) { - throw std::runtime_error("Dereference operator is only supported for symbols."); - } - - ASR::Var_t* var_t = ASR::down_cast(var); - tmp = ASR::make_DereferencePointer_t(al, Lloc(x), var_t->m_v, - ASRUtils::type_get_past_pointer(ASRUtils::expr_type(var))); - is_stmt_created = false; - break; - } default: { - throw std::runtime_error("Only postfix increment, minus and " - "address of operators are supported so far."); + throw std::runtime_error("Only postfix increment and minus are supported so far."); } } return true; From 93ec0105e612db3ada3d52d11633e473b66c341a Mon Sep 17 00:00:00 2001 From: Gagandeep Singh Date: Thu, 8 Feb 2024 01:13:32 +0530 Subject: [PATCH 5/8] Revert "DEV: Added visit_DereferencePointer" This reverts commit 4447aa90abda4c1165b89471f74e303edb12a8d7. --- src/libasr/codegen/asr_to_llvm.cpp | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/src/libasr/codegen/asr_to_llvm.cpp b/src/libasr/codegen/asr_to_llvm.cpp index 9cee1f9..2803d60 100644 --- a/src/libasr/codegen/asr_to_llvm.cpp +++ b/src/libasr/codegen/asr_to_llvm.cpp @@ -6520,21 +6520,12 @@ class ASRToLLVMVisitor : public ASR::BaseVisitor } } - template - void visit_SymbolContainingExpr(const T& x) { + void visit_Var(const ASR::Var_t &x) { ASR::Variable_t *v = ASR::down_cast( symbol_get_past_external(x.m_v)); fetch_var(v); } - void visit_Var(const ASR::Var_t& x) { - visit_SymbolContainingExpr(x); - } - - void visit_DereferencePointer(const ASR::DereferencePointer_t& x) { - visit_SymbolContainingExpr(x); - } - inline ASR::ttype_t* extract_ttype_t_from_expr(ASR::expr_t* expr) { return ASRUtils::expr_type(expr); } From a4ae613fa019550a8dfb36745d2367540c4c3a86 Mon Sep 17 00:00:00 2001 From: Gagandeep Singh Date: Thu, 8 Feb 2024 01:25:09 +0530 Subject: [PATCH 6/8] TEST: Avoid pointer usage in pointer_03.cpp --- integration_tests/pointer_03.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/integration_tests/pointer_03.cpp b/integration_tests/pointer_03.cpp index 92decd4..2abb62d 100644 --- a/integration_tests/pointer_03.cpp +++ b/integration_tests/pointer_03.cpp @@ -12,10 +12,11 @@ int main() { { #define z -(x*2 + y*2) * cos(theta) - float *v; - v = &myreal; - std::cout << a + z << " " << a - z << " " << *v << std::endl; - *v = *v * 4.6; + float v; + v = myreal; + std::cout << a + z << " " << a - z << " " << v << std::endl; + v = v * 4.6; + myreal = v; } std::cout << myreal << std::endl; From 64713b8ff126a15516608de93965d4a46ad53301 Mon Sep 17 00:00:00 2001 From: Gagandeep Singh Date: Thu, 8 Feb 2024 01:25:38 +0530 Subject: [PATCH 7/8] TEST: Added TODO to use pointer later --- integration_tests/pointer_03.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/integration_tests/pointer_03.cpp b/integration_tests/pointer_03.cpp index 2abb62d..f1c8f66 100644 --- a/integration_tests/pointer_03.cpp +++ b/integration_tests/pointer_03.cpp @@ -12,7 +12,7 @@ int main() { { #define z -(x*2 + y*2) * cos(theta) - float v; + float v; // TODO: Convert to float* later v = myreal; std::cout << a + z << " " << a - z << " " << v << std::endl; v = v * 4.6; From f46ea5e2ba06dff431698d36b89f2dc6f97ee0f2 Mon Sep 17 00:00:00 2001 From: Gagandeep Singh Date: Thu, 8 Feb 2024 01:26:01 +0530 Subject: [PATCH 8/8] TEST: Remove llvm label from pointer_01 and pointer_02 --- integration_tests/CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/integration_tests/CMakeLists.txt b/integration_tests/CMakeLists.txt index 7c78100..f0fcde1 100644 --- a/integration_tests/CMakeLists.txt +++ b/integration_tests/CMakeLists.txt @@ -214,8 +214,8 @@ RUN(NAME struct_02.cpp LABELS gcc llvm NOFAST) RUN(NAME struct_03.cpp LABELS gcc llvm NOFAST) RUN(NAME struct_04.cpp LABELS gcc llvm NOFAST) -RUN(NAME pointer_01.cpp LABELS gcc llvm NOFAST) -RUN(NAME pointer_02.cpp LABELS gcc llvm NOFAST) +RUN(NAME pointer_01.cpp LABELS gcc) +RUN(NAME pointer_02.cpp LABELS gcc) RUN(NAME pointer_03.cpp LABELS gcc llvm NOFAST) RUN(NAME function_01.cpp LABELS gcc llvm NOFAST)