Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

add patch for GCCcore 10.2 to fix __has_include regression #11627

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
see https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95889

From f6fe3bbf9f6c0b7249933e19b94560b6b26bf269 Mon Sep 17 00:00:00 2001
From: =?utf8?q?Tiziano=20M=C3=BCller?= <tiziano.mueller@chem.uzh.ch>
Date: Wed, 29 Jul 2020 07:28:23 -0700
Subject: [PATCH] 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.
---
.../cpp/has-include-1-traditional.c | 38 +++++++++++++++++++
libcpp/init.c | 3 ++
libcpp/traditional.c | 4 +-
3 files changed, 44 insertions(+), 1 deletion(-)
create mode 100644 gcc/testsuite/c-c++-common/cpp/has-include-1-traditional.c

diff --git a/gcc/testsuite/c-c++-common/cpp/has-include-1-traditional.c b/gcc/testsuite/c-c++-common/cpp/has-include-1-traditional.c
new file mode 100644
index 00000000000..b0acdbece4d
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/cpp/has-include-1-traditional.c
@@ -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
diff --git a/libcpp/init.c b/libcpp/init.c
index f9f1fb204f0..aba5854d357 100644
--- a/libcpp/init.c
+++ b/libcpp/init.c
@@ -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),
diff --git a/libcpp/traditional.c b/libcpp/traditional.c
index 77adb3bf595..b087072c9b4 100644
--- a/libcpp/traditional.c
+++ b/libcpp/traditional.c
@@ -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;
}

--
2.18.4

2 changes: 2 additions & 0 deletions easybuild/easyconfigs/g/GCCcore/GCCcore-10.2.0.eb
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ sources = [
patches = [
'GCCcore-6.2.0-fix-find-isl.patch',
'GCCcore-9.3.0_gmp-c99.patch',
'GCC-10.2_fix-has-include-Fortran.patch',
]
checksums = [
'27e879dccc639cd7b0cc08ed575c1669492579529b53c9ff27b0b96265fa867d', # gcc-10.2.0.tar.gz
Expand All @@ -37,6 +38,7 @@ checksums = [
'1a668ef92eb181a7c021e8531a3ca89fd71aa1b3744db56f68365ab0a224c5cd', # isl-0.22.1.tar.bz2
'5ad909606d17d851c6ad629b4fddb6c1621844218b8d139fed18c502a7696c68', # GCCcore-6.2.0-fix-find-isl.patch
'0e135e1cc7cec701beea9d7d17a61bab34cfd496b4b555930016b98db99f922e', # GCCcore-9.3.0_gmp-c99.patch
'f94fa117f3401b28fda0741f3f45439c09dc956d1ed27f9a3ebe40c0e7e404b6', # GCC-10.2_fix-has-include-Fortran.patch
]

builddependencies = [
Expand Down