Skip to content
Snippets Groups Projects
  • Jakub Jelinek's avatar
    a6e0d593
    libcpp: Fix _Pragma stringification [PR103165] · a6e0d593
    Jakub Jelinek authored
    
    As the testcase show, sometimes _Pragma is turned into CPP_PRAGMA
    .. CPP_PRAGMA_EOL tokens, even when it might still need to be
    stringized later on.  We are then ICEing because we don't handle
    stringification of CPP_PRAGMA or CPP_PRAGMA_EOL, but trying to
    reconstruct the exact tokens with exact spacing after it has been
    lowered is very hard.  So, instead this patch ensures we don't
    lower _Pragma during expand_arg calls, but only later when
    cpp_get_token_1 is called outside of expand_arg.
    
    2021-11-22  Jakub Jelinek  <jakub@redhat.com>
    	    Tobias Burnus  <tobias@codesourcery.com>
    
    	PR preprocessor/103165
    libcpp/
    	* internal.h (struct lexer_state): Add ignore__Pragma field.
    	* macro.c (builtin_macro): Don't interpret _Pragma if
    	pfile->state.ignore__Pragma.
    	(expand_arg): Temporarily set pfile->state.ignore__Pragma to 1.
    gcc/testsuite/
    	* c-c++-common/gomp/pragma-3.c: New test.
    	* c-c++-common/gomp/pragma-4.c: New test.
    	* c-c++-common/gomp/pragma-5.c: New test.
    
    Co-Authored-By: default avatarTobias Burnus <tobias@codesourcery.com>
    a6e0d593
    History
    libcpp: Fix _Pragma stringification [PR103165]
    Jakub Jelinek authored
    
    As the testcase show, sometimes _Pragma is turned into CPP_PRAGMA
    .. CPP_PRAGMA_EOL tokens, even when it might still need to be
    stringized later on.  We are then ICEing because we don't handle
    stringification of CPP_PRAGMA or CPP_PRAGMA_EOL, but trying to
    reconstruct the exact tokens with exact spacing after it has been
    lowered is very hard.  So, instead this patch ensures we don't
    lower _Pragma during expand_arg calls, but only later when
    cpp_get_token_1 is called outside of expand_arg.
    
    2021-11-22  Jakub Jelinek  <jakub@redhat.com>
    	    Tobias Burnus  <tobias@codesourcery.com>
    
    	PR preprocessor/103165
    libcpp/
    	* internal.h (struct lexer_state): Add ignore__Pragma field.
    	* macro.c (builtin_macro): Don't interpret _Pragma if
    	pfile->state.ignore__Pragma.
    	(expand_arg): Temporarily set pfile->state.ignore__Pragma to 1.
    gcc/testsuite/
    	* c-c++-common/gomp/pragma-3.c: New test.
    	* c-c++-common/gomp/pragma-4.c: New test.
    	* c-c++-common/gomp/pragma-5.c: New test.
    
    Co-Authored-By: default avatarTobias Burnus <tobias@codesourcery.com>