Author: Haowei Wu Date: 2024-07-30T12:27:58-07:00 New Revision: f86ce8675f74a6b8937f99e3562fbcae51fd1f2f
URL: https://github.com/llvm/llvm-project/commit/f86ce8675f74a6b8937f99e3562fbcae51fd1f2f DIFF: https://github.com/llvm/llvm-project/commit/f86ce8675f74a6b8937f99e3562fbcae51fd1f2f.diff LOG: Revert "[C++20] [Modules] Always emit the inline builtins" This reverts commit ca8a4111f796fe8533e0af95557875b15becff06. This patch broke clang test on Windows x64 msvc Added: Modified: clang/lib/CodeGen/CodeGenModule.cpp Removed: clang/test/Modules/inline-builtins.cppm ################################################################################ diff --git a/clang/lib/CodeGen/CodeGenModule.cpp b/clang/lib/CodeGen/CodeGenModule.cpp index 5a575c535b505..344a0e538f22a 100644 --- a/clang/lib/CodeGen/CodeGenModule.cpp +++ b/clang/lib/CodeGen/CodeGenModule.cpp @@ -4022,11 +4022,6 @@ bool CodeGenModule::shouldEmitFunction(GlobalDecl GD) { return true; const auto *F = cast<FunctionDecl>(GD.getDecl()); - // Inline builtins declaration must be emitted. They often are fortified - // functions. - if (F->isInlineBuiltinDeclaration()) - return true; - if (CodeGenOpts.OptimizationLevel == 0 && !F->hasAttr<AlwaysInlineAttr>()) return false; @@ -4072,6 +4067,11 @@ bool CodeGenModule::shouldEmitFunction(GlobalDecl GD) { } } + // Inline builtins declaration must be emitted. They often are fortified + // functions. + if (F->isInlineBuiltinDeclaration()) + return true; + // PR9614. Avoid cases where the source code is lying to us. An available // externally function should have an equivalent function somewhere else, // but a function that calls itself through asm label/`__builtin_` trickery is diff --git a/clang/test/Modules/inline-builtins.cppm b/clang/test/Modules/inline-builtins.cppm deleted file mode 100644 index 8f41ae2659513..0000000000000 --- a/clang/test/Modules/inline-builtins.cppm +++ /dev/null @@ -1,34 +0,0 @@ -// RUN: rm -rf %t -// RUN: split-file %s %t -// RUN: cd %t -// -// RUN: %clang_cc1 -std=c++20 -O3 %t/a.cppm -emit-module-interface -o %t/a.pcm -// RUN: %clang_cc1 -std=c++20 -O3 %t/test.cc -fmodule-file=a=%t/a.pcm \ -// RUN: -emit-llvm -o - | FileCheck %t/test.cc - -//--- memmove.h -typedef long unsigned int size_t; -extern "C" void *memmove (void *__dest, const void *__src, size_t __n) - throw () __attribute__ ((__nonnull__ (1, 2))); -extern "C" __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) void * - memmove (void *__dest, const void *__src, size_t __len) throw () -{ - return __builtin_memmove(__dest, __src, __len); -} - -//--- a.cppm -module; -#include "memmove.h" -export module a; -export using ::memmove; - -//--- test.cc -import a; - -void test() { - int a, b; - unsigned c = 0; - memmove(&a, &b, c); -} - -// CHECK-NOT: memmove _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits