[clang] 4b5baa5 - Handle 128-bits IntegerLiterals in StmtPrinter

Aaron Ballman via cfe-commits cfe-commits at lists.llvm.org
Thu Mar 25 14:27:52 PDT 2021


Author: David Stone
Date: 2021-03-25T17:27:13-04:00
New Revision: 4b5baa5b8244778b0e7253cdb98924c3dab611b7

URL: https://github.com/llvm/llvm-project/commit/4b5baa5b8244778b0e7253cdb98924c3dab611b7
DIFF: https://github.com/llvm/llvm-project/commit/4b5baa5b8244778b0e7253cdb98924c3dab611b7.diff

LOG: Handle 128-bits IntegerLiterals in StmtPrinter

This fixes PR35677: "int128_t or uint128_t as non-type template
parameter causes crash when considering invalid constructor".

Added: 
    clang/test/AST/ast-print-int128.cpp

Modified: 
    clang/lib/AST/StmtPrinter.cpp

Removed: 
    


################################################################################
diff  --git a/clang/lib/AST/StmtPrinter.cpp b/clang/lib/AST/StmtPrinter.cpp
index 9acfeda4e76c..ca35c6dccbf8 100644
--- a/clang/lib/AST/StmtPrinter.cpp
+++ b/clang/lib/AST/StmtPrinter.cpp
@@ -1170,6 +1170,10 @@ void StmtPrinter::VisitIntegerLiteral(IntegerLiteral *Node) {
   case BuiltinType::ULong:     OS << "UL"; break;
   case BuiltinType::LongLong:  OS << "LL"; break;
   case BuiltinType::ULongLong: OS << "ULL"; break;
+  case BuiltinType::Int128:
+    break; // no suffix.
+  case BuiltinType::UInt128:
+    break; // no suffix.
   }
 }
 

diff  --git a/clang/test/AST/ast-print-int128.cpp b/clang/test/AST/ast-print-int128.cpp
new file mode 100644
index 000000000000..01a130ceaa32
--- /dev/null
+++ b/clang/test/AST/ast-print-int128.cpp
@@ -0,0 +1,15 @@
+// RUN: %clang_cc1 -ast-print -std=c++20 %s -o - | FileCheck %s
+
+template <bool>
+struct enable_if {
+};
+
+template <__uint128_t x, typename = typename enable_if<x != 0>::type>
+void f();
+
+template <__int128_t>
+void f();
+
+using T = decltype(f<0>());
+
+// CHECK: using T = decltype(f<0>());


        


More information about the cfe-commits mailing list