Reenable POSIX builtin library functions in gnu2x mode
gnu17 and earlier modes automatically expose several POSIX C APIs, and
this was accidentally disabled for gnu2x in
7d644e1215
.
This restores the behavior for gnu2x mode (without changing the
behavior in C standards modes instead of GNU modes).
Fixes #56607
This commit is contained in:
parent
c8e7a87b1e
commit
931b6d51d8
|
@ -227,6 +227,10 @@ Bug Fixes
|
|||
`Issue 57377 <https://github.com/llvm/llvm-project/issues/57377>`_.
|
||||
- Fix a crash when a ``btf_type_tag`` attribute is applied to the pointee of
|
||||
a function pointer.
|
||||
- Clang 14 predeclared some builtin POSIX library functions in ``gnu2x`` mode,
|
||||
and Clang 15 accidentally stopped predeclaring those functions in that
|
||||
language mode. Clang 16 now predeclares those functions again. This fixes
|
||||
`Issue 56607 <https://github.com/llvm/llvm-project/issues/56607>`_.
|
||||
|
||||
Improvements to Clang's diagnostics
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
|
@ -939,11 +939,9 @@ bool Sema::LookupBuiltin(LookupResult &R) {
|
|||
|
||||
// If this is a builtin on this (or all) targets, create the decl.
|
||||
if (unsigned BuiltinID = II->getBuiltinID()) {
|
||||
// In C++, C2x, and OpenCL (spec v1.2 s6.9.f), we don't have any
|
||||
// predefined library functions like 'malloc'. Instead, we'll just
|
||||
// error.
|
||||
if ((getLangOpts().CPlusPlus || getLangOpts().OpenCL ||
|
||||
getLangOpts().C2x) &&
|
||||
// In C++ and OpenCL (spec v1.2 s6.9.f), we don't have any predefined
|
||||
// library functions like 'malloc'. Instead, we'll just error.
|
||||
if ((getLangOpts().CPlusPlus || getLangOpts().OpenCL) &&
|
||||
Context.BuiltinInfo.isPredefinedLibFunction(BuiltinID))
|
||||
return false;
|
||||
|
||||
|
|
13
clang/test/Sema/gnu-builtins.c
Normal file
13
clang/test/Sema/gnu-builtins.c
Normal file
|
@ -0,0 +1,13 @@
|
|||
// RUN: %clang_cc1 -fsyntax-only -verify=gnu -std=gnu17 %s
|
||||
// RUN: %clang_cc1 -fsyntax-only -verify=gnu -std=gnu2x %s
|
||||
// RUN: %clang_cc1 -fsyntax-only -verify=std -std=c17 %s
|
||||
// RUN: %clang_cc1 -fsyntax-only -verify=std -std=c2x %s
|
||||
|
||||
// std-no-diagnostics
|
||||
|
||||
// 'index' is a builtin library function, but only in GNU mode. So this should
|
||||
// give an error in GNU modes but be okay in non-GNU mode.
|
||||
// FIXME: the error is correct, but these notes are pretty awful.
|
||||
int index; // gnu-error {{redefinition of 'index' as different kind of symbol}} \
|
||||
gnu-note {{unguarded header; consider using #ifdef guards or #pragma once}} \
|
||||
gnu-note {{previous definition is here}}
|
Loading…
Reference in a new issue