Thread

  1. General Bug Report: ECPG fails to parse comments correctly

    Unprivileged user <nobody> — 1999-05-12T19:04:43Z

    ============================================================================
                            POSTGRESQL BUG REPORT TEMPLATE
    ============================================================================
    
    
    Your name               : Craig Orsinger
    Your email address      : orsingerc@epg.lewis.army.mil
    
    Category                : runtime: front-end: C
    Severity                : non-critical
    
    Summary: ECPG fails to parse comments correctly
    
    System Configuration
    --------------------
      Operating System   : HPUX 10.20 and Linux 2.0.36
    
      PostgreSQL version : 6.4.2
    
      Compiler used      : gcc, HP cc
    
    Hardware:
    ---------
    HP 715/100 workstation, 64MB  RAM
    NEC Versa LX laptop, 128MB RAM
    
    
    Versions of other tools:
    ------------------------
    GNU make
    
    --------------------------------------------------------------------------
    
    Problem Description:
    --------------------
    While trying to compile a function written in
    embedded SQL for C, got an error indication of the
    form:
    
    test.pgc:30: unbalanced `#endif'
    
    After some trial and error, I discovered that this 
    message occured if a C preprocessor directive was
    placed after the end of a block of code that was
    terminated by a comment (see example). Putting the
    comment on a separate line cured this difficulty.
    The ecpg invocation was of the form:
    
    ecpg test.pgc
    gcc -O2 -I$PGDIR/include -c test.c -o test.o
    
    There were no other command line parameters.
    "PGDIR" is the root of the PostgreSQL installation.
    
    
    
    --------------------------------------------------------------------------
    
    Test Case:
    ----------
    Compile this bit of C source with these commands:
    
    ecpg test.pgc
    gcc -O2 -I$PGDIR/include -c test.c -o test.o
    
    /* test.pgc - demonstrate comment-parsing problem */
    
    
    EXEC SQL INCLUDE sqlca.h ;
    
    
    int func_we_want( int paramA )
       {
    EXEC SQL BEGIN DECLARE SECTION ;
       int retval ;
    EXEC SQL END DECLARE SECTION ;
    
       retval = paramA ;
       return( retval ) ;
    
       } /* end of 'func_we_want()' */
       
    #ifdef WE_WANT_THIS_FUNC
    
    int func_we_dont_want( int paramA )
       {
    EXEC SQL BEGIN DECLARE SECTION ;
       int retval ;
    EXEC SQL END DECLARE SECTION ;
    
       retval = paramA ;
       return( retval ) ;
    
       } /* end of 'func_we_dont_want()' */
       
    #endif
    
    As written, it will fail. To make it compile correctly,
    just insert a newline between the '}' and the "end of .."
    comments at the end of each function.
    
    
    --------------------------------------------------------------------------
    
    Solution:
    ---------
    I'd suggest that you ensure that there is always a 
    newline after the closing bracket of a block of C
    source.
    
    
    --------------------------------------------------------------------------