[clang] Revert "[clang][Sema] Declare builtins used in #pragma intrinsic" (PR #141994)

Nick Sarnie via cfe-commits cfe-commits at lists.llvm.org
Thu May 29 10:33:23 PDT 2025


https://github.com/sarnex created https://github.com/llvm/llvm-project/pull/141994

Reverts llvm/llvm-project#138205

Breaks Chrome.

>From fb79103e3dca8a2a0f5732aefbc9cf71b967d357 Mon Sep 17 00:00:00 2001
From: Nick Sarnie <nick.sarnie at intel.com>
Date: Thu, 29 May 2025 17:33:04 +0000
Subject: [PATCH] Revert "[clang][Sema] Declare builtins used in #pragma
 intrinsic (#138205)"

This reverts commit 95bd9eef42679f3d13e3279204c75372e2c062f0.
---
 clang/lib/Parse/ParsePragma.cpp               | 18 +++----------
 .../test/Sema/Inputs/builtin-system-header.h  |  9 -------
 clang/test/Sema/builtin-pragma-intrinsic.c    | 25 -------------------
 3 files changed, 3 insertions(+), 49 deletions(-)
 delete mode 100644 clang/test/Sema/Inputs/builtin-system-header.h
 delete mode 100644 clang/test/Sema/builtin-pragma-intrinsic.c

diff --git a/clang/lib/Parse/ParsePragma.cpp b/clang/lib/Parse/ParsePragma.cpp
index 4e67fd033b9aa..77b61af768993 100644
--- a/clang/lib/Parse/ParsePragma.cpp
+++ b/clang/lib/Parse/ParsePragma.cpp
@@ -301,13 +301,9 @@ struct PragmaMSRuntimeChecksHandler : public EmptyPragmaHandler {
 };
 
 struct PragmaMSIntrinsicHandler : public PragmaHandler {
-  PragmaMSIntrinsicHandler(Sema &Actions)
-      : PragmaHandler("intrinsic"), Actions(Actions) {}
+  PragmaMSIntrinsicHandler() : PragmaHandler("intrinsic") {}
   void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer,
                     Token &FirstToken) override;
-
-private:
-  Sema &Actions;
 };
 
 // "\#pragma fenv_access (on)".
@@ -521,7 +517,7 @@ void Parser::initializePragmaHandlers() {
     PP.AddPragmaHandler(MSOptimize.get());
     MSRuntimeChecks = std::make_unique<PragmaMSRuntimeChecksHandler>();
     PP.AddPragmaHandler(MSRuntimeChecks.get());
-    MSIntrinsic = std::make_unique<PragmaMSIntrinsicHandler>(Actions);
+    MSIntrinsic = std::make_unique<PragmaMSIntrinsicHandler>();
     PP.AddPragmaHandler(MSIntrinsic.get());
     MSFenvAccess = std::make_unique<PragmaMSFenvAccessHandler>();
     PP.AddPragmaHandler(MSFenvAccess.get());
@@ -3797,15 +3793,7 @@ void PragmaMSIntrinsicHandler::HandlePragma(Preprocessor &PP,
     if (!II->getBuiltinID())
       PP.Diag(Tok.getLocation(), diag::warn_pragma_intrinsic_builtin)
           << II << SuggestIntrinH;
-    // If the builtin hasn't already been declared, declare it now.
-    DeclarationNameInfo NameInfo(II, Tok.getLocation());
-    LookupResult Previous(Actions, NameInfo, Sema::LookupOrdinaryName,
-                          Actions.forRedeclarationInCurContext());
-    Actions.LookupName(Previous, Actions.getCurScope(),
-                       /*CreateBuiltins*/ false);
-    if (Previous.empty())
-      Actions.LazilyCreateBuiltin(II, II->getBuiltinID(), Actions.getCurScope(),
-                                  /*ForRedeclaration*/ true, Tok.getLocation());
+
     PP.Lex(Tok);
     if (Tok.isNot(tok::comma))
       break;
diff --git a/clang/test/Sema/Inputs/builtin-system-header.h b/clang/test/Sema/Inputs/builtin-system-header.h
deleted file mode 100644
index 7eeb8d811fcfa..0000000000000
--- a/clang/test/Sema/Inputs/builtin-system-header.h
+++ /dev/null
@@ -1,9 +0,0 @@
-#ifdef USE_PRAGMA_BEFORE
-#pragma intrinsic(_InterlockedOr64)
-#endif
-
-#define MACRO(x,y) _InterlockedOr64(x,y);
-
-#ifdef USE_PRAGMA_AFTER
-#pragma intrinsic(_InterlockedOr64)
-#endif
diff --git a/clang/test/Sema/builtin-pragma-intrinsic.c b/clang/test/Sema/builtin-pragma-intrinsic.c
deleted file mode 100644
index 1e8507bfd37df..0000000000000
--- a/clang/test/Sema/builtin-pragma-intrinsic.c
+++ /dev/null
@@ -1,25 +0,0 @@
-// RUN: %clang_cc1 -fms-extensions -fsyntax-only -verify -triple arm64-windows -isystem %S/Inputs %s -DUSE_PRAGMA_BEFORE
-// RUN: %clang_cc1 -fms-extensions -fsyntax-only -verify -triple arm64-windows -isystem %S/Inputs %s -DUSE_PRAGMA_AFTER
-// RUN: %clang_cc1 -fms-extensions -fsyntax-only -verify -triple arm64-windows -isystem %S/Inputs %s -DUSE_PRAGMA_AFTER_USE
-// RUN: %clang_cc1 -fms-extensions -fsyntax-only -verify -triple arm64-windows -isystem %S/Inputs %s -DUSE_PRAGMA_SAME_FILE
-// RUN: %clang_cc1 -fms-extensions -fsyntax-only -verify -triple arm64-windows -isystem %S/Inputs %s
-
-#if defined(USE_PRAGMA_BEFORE) || defined(USE_PRAGMA_AFTER) || defined(USE_PRAGMA_SAME_FILE)
-// expected-no-diagnostics
-#else
-// expected-error at +10 {{call to undeclared library function '_InterlockedOr64'}}
-// expected-note at +9 {{include the header <intrin.h> or explicitly provide a declaration for '_InterlockedOr64'}}
-#endif
-#include <builtin-system-header.h>
-
-#ifdef USE_PRAGMA_SAME_FILE
-#pragma intrinsic(_InterlockedOr64)
-#endif
-
-void foo() {
-  MACRO(0,0);
-}
-
-#ifdef USE_PRAGMA_AFTER_USE
-#pragma intrinsic(_InterlockedOr64)
-#endif



More information about the cfe-commits mailing list