diff --git a/gcc/cobol/parse.y b/gcc/cobol/parse.y
index 5be51cf8ee42e4cb7e863d1c3278f605a3efd15e..440c75dc3ea5c412d6d2ee8e0cd1de68bed2f733 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 10cb2654caa41aa386eaff7c52c6b377d2415bf9..ab023df251f431e55f089622e86d12cb4b97c4ce 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 aff38a8eaa3ee3693af8eefe96411ca21e9894b6..70db95b01c7d6b6dfea28c0a85950ace8690605d 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);
 }