preprocessor: Teach traditional about has_include [PR95889]
Traditional cpp (used by fortran) didn;t know about the new __has_include__ implementation. Hey, since when did traditional cpp grow __has_include__? That wasn't in knr! libcpp/ * init.c (builtin_array): Add xref comment. * traditional.c (fun_like_macro): Add HAS_INCLUDE codes. gcc/testsuite/ * c-c++-common/cpp/has-include-1-traditional.c: New.
This commit is contained in:
parent
55ede0bb87
commit
f6fe3bbf9f
38
gcc/testsuite/c-c++-common/cpp/has-include-1-traditional.c
Normal file
38
gcc/testsuite/c-c++-common/cpp/has-include-1-traditional.c
Normal file
@ -0,0 +1,38 @@
|
||||
/* { dg-do preprocess { target c } } */
|
||||
/* { dg-options "-traditional-cpp" } */
|
||||
|
||||
#if __has_include ("stdlib.h")
|
||||
#else
|
||||
#error error 1
|
||||
#endif
|
||||
#if __has_include (<stdlib.h>)
|
||||
#else
|
||||
#error error 2
|
||||
#endif
|
||||
#if !__has_include ("stdlib.h")
|
||||
#error error 3
|
||||
#elif !__has_include (<stdlib.h>)
|
||||
#error error 4
|
||||
#endif
|
||||
#if __has_include ("stdlib.h") && __has_include (<stdlib.h>)
|
||||
#else
|
||||
#error error 5
|
||||
#endif
|
||||
#if !defined(__has_include)
|
||||
#error error 6
|
||||
#endif
|
||||
#ifndef __has_include
|
||||
#error error 7
|
||||
#endif
|
||||
#ifdef __has_include
|
||||
#else
|
||||
#error error 8
|
||||
#endif
|
||||
#define m1 __has_include("stdlib.h")
|
||||
#define m2 <stdlib.h>
|
||||
#if !m1
|
||||
#error error 9
|
||||
#endif
|
||||
#if !__has_include (m2)
|
||||
#error error 13
|
||||
#endif
|
@ -400,6 +400,9 @@ static const struct builtin_macro builtin_array[] =
|
||||
B("__LINE__", BT_SPECLINE, true),
|
||||
B("__INCLUDE_LEVEL__", BT_INCLUDE_LEVEL, true),
|
||||
B("__COUNTER__", BT_COUNTER, true),
|
||||
/* Make sure to update the list of built-in
|
||||
function-like macros in traditional.c:
|
||||
fun_like_macro() when adding more following */
|
||||
B("__has_attribute", BT_HAS_ATTRIBUTE, true),
|
||||
B("__has_cpp_attribute", BT_HAS_ATTRIBUTE, true),
|
||||
B("__has_builtin", BT_HAS_BUILTIN, true),
|
||||
|
@ -330,7 +330,9 @@ fun_like_macro (cpp_hashnode *node)
|
||||
{
|
||||
if (cpp_builtin_macro_p (node))
|
||||
return (node->value.builtin == BT_HAS_ATTRIBUTE
|
||||
|| node->value.builtin == BT_HAS_BUILTIN);
|
||||
|| node->value.builtin == BT_HAS_BUILTIN
|
||||
|| node->value.builtin == BT_HAS_INCLUDE
|
||||
|| node->value.builtin == BT_HAS_INCLUDE_NEXT);
|
||||
return node->value.macro->fun_like;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user