Fix Xcode 16 build break with NULL != nullptr

As of Xcode 16 beta 2 with the macOS 15 SDK, each re-inclusion of the
stddef.h header causes the NULL macro in C++ to be re-defined to an
integral constant (__null). This makes the workaround in d59a576b8
("Redefine NULL to nullptr") ineffective, as other headers that are
typically included after system.h (such as obstack.h) do include
stddef.h too.

This can be seen by running the sample below through `clang++ -E`

    #include <stddef.h>
    #define NULL nullptr
    #include <stddef.h>
    NULL

The relevant libc++ change is here:
2950283ddd

Filed as FB14261859 to Apple and added a comment about it on LLVM PR
86843.

This fixes the cases in --enable-languages=c,c++,objc,obj-c++,rust build
where NULL being an integral constant instead of a null pointer literal
(therefore no longer implicitly converting to a pointer when used as a
template function's argument) caused issues.

    gcc/value-pointer-equiv.cc:65:43: error: no viable conversion from `pair<typename __unwrap_ref_decay<long>::type, typename __unwrap_ref_decay<long>::type>' to 'const pair<tree, tree>'

    65 |   const std::pair <tree, tree> m_marker = std::make_pair (NULL, NULL);
       |                                           ^~~~~~~~~~~~~~~~~~~~~~~~~~~

As noted in the previous commit though, the proper solution would be to
phase out the usages of NULL in GCC's C++ source code.

gcc/analyzer/ChangeLog:

	* diagnostic-manager.cc (saved_diagnostic::saved_diagnostic):
	Change NULL to nullptr.
	(struct null_assignment_sm_context): Likewise.
	* infinite-loop.cc: Likewise.
	* infinite-recursion.cc: Likewise.
	* varargs.cc (va_list_state_machine::on_leak): Likewise.

gcc/rust/ChangeLog:

	* metadata/rust-imports.cc (Import::try_package_in_directory):
	Change NULL to nullptr.

gcc/ChangeLog:

	* value-pointer-equiv.cc: Change NULL to nullptr.

Signed-off-by: Daniel Bertalan <dani@danielbertalan.dev>
(cherry picked from commit 08776bef53835ff6318ecfeade8f6c6896ffd81f)
This commit is contained in:
Daniel Bertalan 2024-07-09 23:34:46 +02:00 committed by Iain Sandoe
parent 0abce4116a
commit 187eec8a2f
6 changed files with 14 additions and 14 deletions

View file

@ -678,12 +678,12 @@ saved_diagnostic::saved_diagnostic (const state_machine *sm,
m_stmt (ploc.m_stmt),
/* stmt_finder could be on-stack; we want our own copy that can
outlive that. */
m_stmt_finder (ploc.m_finder ? ploc.m_finder->clone () : NULL),
m_stmt_finder (ploc.m_finder ? ploc.m_finder->clone () : nullptr),
m_loc (ploc.m_loc),
m_var (var), m_sval (sval), m_state (state),
m_d (std::move (d)), m_trailing_eedge (NULL),
m_d (std::move (d)), m_trailing_eedge (nullptr),
m_idx (idx),
m_best_epath (NULL), m_problem (NULL),
m_best_epath (nullptr), m_problem (nullptr),
m_notes ()
{
/* We must have an enode in order to be able to look for paths
@ -1790,10 +1790,10 @@ public:
stmt,
stack_depth,
sm,
NULL,
nullptr,
src_sm_val,
dst_sm_val,
NULL,
nullptr,
dst_state,
src_node));
return false;
@ -1983,9 +1983,9 @@ struct null_assignment_sm_context : public sm_context
m_sm,
var_new_sval,
from, to,
NULL,
nullptr,
*m_new_state,
NULL));
nullptr));
}
void set_next_state (const gimple *stmt,
@ -2009,9 +2009,9 @@ struct null_assignment_sm_context : public sm_context
m_sm,
sval,
from, to,
NULL,
nullptr,
*m_new_state,
NULL));
nullptr));
}
void warn (const supernode *, const gimple *,

View file

@ -225,7 +225,7 @@ public:
enode->get_function ()->decl,
enode->get_stack_depth ()),
enode,
NULL, NULL, NULL));
nullptr, nullptr, nullptr));
logger *logger = emission_path->get_logger ();

View file

@ -195,7 +195,7 @@ public:
m_callee_fndecl,
m_new_entry_enode->get_stack_depth ()),
enode,
NULL, NULL, NULL));
nullptr, nullptr, nullptr));
}
/* Reject paths in which conjured svalues have affected control flow

View file

@ -630,7 +630,7 @@ va_list_state_machine::on_va_end (sm_context *sm_ctxt,
std::unique_ptr<pending_diagnostic>
va_list_state_machine::on_leak (tree var) const
{
return make_unique<va_list_leak> (*this, NULL, var);
return make_unique<va_list_leak> (*this, nullptr, var);
}
} // anonymous namespace

View file

@ -179,7 +179,7 @@ Import::try_package_in_directory (const std::string &filename,
"%s exists but does not contain any Rust export data",
found_filename.c_str ());
return std::make_pair (NULL, macros);
return std::make_pair (nullptr, macros);
}
// Given import "*PFILENAME", where *PFILENAME does not exist, try

View file

@ -62,7 +62,7 @@ public:
private:
auto_vec<std::pair <tree, tree>> m_stack;
auto_vec<tree> m_replacements;
const std::pair <tree, tree> m_marker = std::make_pair (NULL, NULL);
const std::pair <tree, tree> m_marker = std::make_pair (NULL_TREE, NULL_TREE);
};
ssa_equiv_stack::ssa_equiv_stack ()