[llvm] ee6ec9e - [demangler] Parenthesize >> inside template args
Nathan Sidwell via llvm-commits
llvm-commits at lists.llvm.org
Mon Apr 4 06:36:05 PDT 2022
Author: Nathan Sidwell
Date: 2022-04-04T06:35:32-07:00
New Revision: ee6ec9e861e6d7d4d29712e9a7176fcbb975f519
URL: https://github.com/llvm/llvm-project/commit/ee6ec9e861e6d7d4d29712e9a7176fcbb975f519
DIFF: https://github.com/llvm/llvm-project/commit/ee6ec9e861e6d7d4d29712e9a7176fcbb975f519.diff
LOG: [demangler] Parenthesize >> inside template args
Both > and >> expressions need to be parenthesized inside template
argument lists.
Reviewed By: dblaikie, rjmccall
Differential Revision: https://reviews.llvm.org/D122474
Added:
Modified:
libcxxabi/src/demangle/ItaniumDemangle.h
libcxxabi/test/test_demangle.pass.cpp
llvm/include/llvm/Demangle/ItaniumDemangle.h
Removed:
################################################################################
diff --git a/libcxxabi/src/demangle/ItaniumDemangle.h b/libcxxabi/src/demangle/ItaniumDemangle.h
index 46b390bcd996a..9a0b9bfdea623 100644
--- a/libcxxabi/src/demangle/ItaniumDemangle.h
+++ b/libcxxabi/src/demangle/ItaniumDemangle.h
@@ -1707,7 +1707,8 @@ class BinaryExpr : public Node {
}
void printLeft(OutputBuffer &OB) const override {
- bool ParenAll = OB.isGtInsideTemplateArgs() && InfixOperator == ">";
+ bool ParenAll = OB.isGtInsideTemplateArgs() &&
+ (InfixOperator == ">" || InfixOperator == ">>");
if (ParenAll)
OB.printOpen();
// Assignment is right associative, with special LHS precedence.
diff --git a/libcxxabi/test/test_demangle.pass.cpp b/libcxxabi/test/test_demangle.pass.cpp
index 916fda6a929de..1ba6170a2b7a8 100644
--- a/libcxxabi/test/test_demangle.pass.cpp
+++ b/libcxxabi/test/test_demangle.pass.cpp
@@ -29629,7 +29629,7 @@ const char* cases[][2] =
{"_ZN5Casts8implicitILj4EEEvPN9enable_ifIXrMT_Li4EEvE4typeE",
"void Casts::implicit<4u>(enable_if<4u %= 4, void>::type*)"},
{"_ZN5Casts8implicitILj4EEEvPN9enable_ifIXrsT_Li4EEvE4typeE",
- "void Casts::implicit<4u>(enable_if<4u >> 4, void>::type*)"},
+ "void Casts::implicit<4u>(enable_if<(4u >> 4), void>::type*)"},
{"_ZN5Casts8implicitILj4EEEvPN9enable_ifIXrST_Li4EEvE4typeE",
"void Casts::implicit<4u>(enable_if<4u >>= 4, void>::type*)"},
{"_Z1fPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP1XS13_S12_S11_S10_SZ_SY_SX_SW_SV_SU_ST_SS_SR_SQ_SP_SO_SN_SM_SL_SK_SJ_"
diff --git a/llvm/include/llvm/Demangle/ItaniumDemangle.h b/llvm/include/llvm/Demangle/ItaniumDemangle.h
index 62e91fb2e9b9c..d969b48068716 100644
--- a/llvm/include/llvm/Demangle/ItaniumDemangle.h
+++ b/llvm/include/llvm/Demangle/ItaniumDemangle.h
@@ -1707,7 +1707,8 @@ class BinaryExpr : public Node {
}
void printLeft(OutputBuffer &OB) const override {
- bool ParenAll = OB.isGtInsideTemplateArgs() && InfixOperator == ">";
+ bool ParenAll = OB.isGtInsideTemplateArgs() &&
+ (InfixOperator == ">" || InfixOperator == ">>");
if (ParenAll)
OB.printOpen();
// Assignment is right associative, with special LHS precedence.
More information about the llvm-commits
mailing list