From acaf9efb3b9b883f7aeb18246233cb3d78332e0f Mon Sep 17 00:00:00 2001 From: "James K. Lowden" <jklowden@symas.com> Date: Mon, 22 Apr 2024 16:41:59 -0400 Subject: [PATCH] PROCEDURE-POINTER is MF, too --- gcc/cobol/parse.y | 1 + gcc/cobol/scan.l | 10 +++++++--- gcc/cobol/symbols.h | 5 +++++ 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/gcc/cobol/parse.y b/gcc/cobol/parse.y index 5be51cf8ee42..440c75dc3ea5 100644 --- a/gcc/cobol/parse.y +++ b/gcc/cobol/parse.y @@ -11332,6 +11332,7 @@ cobol_dialect_set( cbl_dialect_t dialect ) { cbl_dialect = dialect; if( dialect == dialect_ibm_e ) cobol_gcobol_feature_set(feature_embiggen_e); } +cbl_dialect_t cobol_dialect() { return cbl_dialect; } static bool internal_ebcdic_locked = false; diff --git a/gcc/cobol/scan.l b/gcc/cobol/scan.l index 10cb2654caa4..ab023df251f4 100644 --- a/gcc/cobol/scan.l +++ b/gcc/cobol/scan.l @@ -969,11 +969,15 @@ USE({SPC}FOR)? { return USE; } OBJECT{SPC}REFERENCE { yyerror("error: unimplemented USAGE type: OBJECT REFERENCE"); } PACKED-DECIMAL { return PACKED_DECIMAL; } + POINTER { return POINTER; } FUNCTION-POINTER { return POINTER; } PROGRAM-POINTER { return POINTER; } - PROCEDURE-POINTER { if( !dialect_ibm() ) yyerror("%s requires '-dialect ibm'"); - return POINTER; } // return it anyway - POINTER { return POINTER; } + + PROCEDURE-POINTER { if( dialect_gcc() ) { + yyerror("%s requires -dialect ibm or mf"); + } + return POINTER; // return it anyway + } ZEROE?S? { return ZERO; } SPACES? { yylval.string = NULL; return SPACES; } diff --git a/gcc/cobol/symbols.h b/gcc/cobol/symbols.h index aff38a8eaa3e..70db95b01c7d 100644 --- a/gcc/cobol/symbols.h +++ b/gcc/cobol/symbols.h @@ -87,8 +87,13 @@ enum cbl_dialect_t { extern cbl_dialect_t cbl_dialect; void cobol_dialect_set( cbl_dialect_t dialect ); +cbl_dialect_t dialect_is(); //// bool dialect_gnu() { return dialect_gnu_e == (cbl_dialect & dialect_gnu_e); } +static inline bool dialect_gcc() { + return dialect_gcc_e == (cbl_dialect & dialect_gcc_e ); +} + static inline bool dialect_ibm() { return dialect_ibm_e == (cbl_dialect & dialect_ibm_e); } -- GitLab