[PATCH] D134507: [Clang] add missing ClangABICompat check

Yuanfang Chen via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Thu Sep 22 17:54:27 PDT 2022


ychen created this revision.
ychen added reviewers: aaron.ballman, erichkeane.
Herald added a project: All.
ychen requested review of this revision.
Herald added a project: clang.
Herald added a subscriber: cfe-commits.

In the same spirit of da6187f566b7881cb <https://reviews.llvm.org/rGda6187f566b7881cb8350621aea9bd582de569b9>. This maintains compatibility
with GCC.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D134507

Files:
  clang/lib/Sema/SemaTemplateDeduction.cpp
  clang/test/CodeGen/partial-order-variadic.cpp


Index: clang/test/CodeGen/partial-order-variadic.cpp
===================================================================
--- clang/test/CodeGen/partial-order-variadic.cpp
+++ clang/test/CodeGen/partial-order-variadic.cpp
@@ -1,5 +1,9 @@
-// RUN: %clang_cc1 -triple x86_64-unknown-unknown -fclang-abi-compat=15 -DCLANG_ABI_COMPAT=15 %s -emit-llvm -disable-llvm-passes -o - | FileCheck %s
-// RUN: %clang_cc1 -triple x86_64-unknown-unknown %s -emit-llvm -disable-llvm-passes -o - | FileCheck %s --check-prefixes=CHECK,AFTER-15
+// RUN: %clang_cc1 -triple x86_64-unknown-unknown -fclang-abi-compat=15 \
+// RUN:     -DCLANG_ABI_COMPAT=15 %s -emit-llvm -disable-llvm-passes -o - \
+// RUN:     | FileCheck %s --check-prefixes=CHECK,BEFORE-15
+// RUN: %clang_cc1 -triple x86_64-unknown-unknown %s -emit-llvm \
+// RUN:     -disable-llvm-passes -o - \
+// RUN:     | FileCheck %s --check-prefixes=CHECK,AFTER-15
 
 // CHECK: %struct.S = type { i8 }
 // CHECK: @_Z2ggiRi
@@ -18,7 +22,14 @@
 template<class T>    void h(const T&) {}
 template void h(int*);
 
-#if !defined(CLANG_ABI_COMPAT)
+#if defined(CLANG_ABI_COMPAT)
+
+// BEFORE-15: _Z2g2IiJEEvT_DpT0_
+template <class T, class... U> void g2(T, U...) {};
+template <class T> void g2(T, int x = 0) {};
+template void g2(int);
+
+#else
 
 // AFTER-15: @_Z1fIiJEEvPT_DpT0_
 template<class T, class... U> void f(T*, U...){}
Index: clang/lib/Sema/SemaTemplateDeduction.cpp
===================================================================
--- clang/lib/Sema/SemaTemplateDeduction.cpp
+++ clang/lib/Sema/SemaTemplateDeduction.cpp
@@ -5216,6 +5216,10 @@
   bool Variadic1 = NumParams1 && FD1->parameters().back()->isParameterPack();
   bool Variadic2 = NumParams2 && FD2->parameters().back()->isParameterPack();
   if (Variadic1 != Variadic2) {
+    bool ClangABICompat15 = Context.getLangOpts().getClangABICompat() <=
+                            LangOptions::ClangABI::Ver15;
+    if (ClangABICompat15)
+      return Variadic1 ? FT2 : FT1;
     if (Variadic1 && NumParams1 > NumParams2)
       return FT2;
     if (Variadic2 && NumParams2 > NumParams1)


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D134507.462364.patch
Type: text/x-patch
Size: 2098 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20220923/10fb1b7e/attachment-0001.bin>


More information about the cfe-commits mailing list