[PATCH] D88526: [clang][Sema] Fix PR47676: Handle dependent AltiVec C-style cast
Hubert Tong via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Thu Oct 1 12:57:15 PDT 2020
This revision was automatically updated to reflect the committed changes.
Closed by commit rG35ecc7fe49ba: [clang][Sema] Fix PR47676: Handle dependent AltiVec C-style cast (authored by hubert.reinterpretcast).
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D88526/new/
https://reviews.llvm.org/D88526
Files:
clang/lib/Sema/SemaExpr.cpp
clang/test/SemaTemplate/pr47676.cpp
Index: clang/test/SemaTemplate/pr47676.cpp
===================================================================
--- /dev/null
+++ clang/test/SemaTemplate/pr47676.cpp
@@ -0,0 +1,38 @@
+// RUN: %clang_cc1 -triple=powerpc64le-unknown-linux-gnu \
+// RUN: -target-feature +altivec -fsyntax-only -ast-dump \
+// RUN: -xc++ < %s 2>&1 \
+// RUN: | FileCheck %s
+
+// Ensures that casts to AltiVec type with a dependent expression operand does
+// not hit the assertion failure reported in PR47676. Further checks that casts
+// to AltiVec type with a dependent expression operand is, on instantiation,
+// able to correctly differentiate between a splat case and a bitcast case.
+template <typename T> void f(T *tp) {
+ extern void g(int, ...);
+ g(0, (__vector int)(*tp));
+ g(0, (__vector int)*tp);
+}
+
+void g(void) {
+ f<__vector float>(nullptr);
+// CHECK: | |-FunctionDecl {{.*}} f 'void (__vector float *)'
+
+// CHECK: | | `-CStyleCastExpr {{.*}} '__vector int' <NoOp>
+// CHECK-NEXT: | | `-ImplicitCastExpr {{.*}} '__vector int' <BitCast>
+// CHECK-NEXT: | | `-ImplicitCastExpr {{.*}}'__vector float' <LValueToRValue>
+
+// CHECK: | `-CStyleCastExpr {{.*}} '__vector int' <NoOp>
+// CHECK-NEXT: | `-ImplicitCastExpr {{.*}} '__vector int' <BitCast>
+// CHECK-NEXT: | `-ImplicitCastExpr {{.*}}'__vector float' <LValueToRValue>
+
+ f<double>(nullptr);
+// CHECK: | `-FunctionDecl {{.*}} f 'void (double *)'
+
+// CHECK: | | `-CStyleCastExpr {{.*}} '__vector int' <VectorSplat>
+// CHECK-NEXT: | | `-ImplicitCastExpr {{.*}} 'int' <FloatingToIntegral>
+// CHECK-NEXT: | | `-ImplicitCastExpr {{.*}}'double' <LValueToRValue>
+
+// CHECK: | `-CStyleCastExpr {{.*}} '__vector int' <VectorSplat>
+// CHECK-NEXT: | `-ImplicitCastExpr {{.*}} 'int' <FloatingToIntegral>
+// CHECK-NEXT: | `-ImplicitCastExpr {{.*}}:'double' <LValueToRValue>
+}
Index: clang/lib/Sema/SemaExpr.cpp
===================================================================
--- clang/lib/Sema/SemaExpr.cpp
+++ clang/lib/Sema/SemaExpr.cpp
@@ -7408,7 +7408,7 @@
}
if (PE || PLE->getNumExprs() == 1) {
Expr *E = (PE ? PE->getSubExpr() : PLE->getExpr(0));
- if (!E->getType()->isVectorType())
+ if (!E->isTypeDependent() && !E->getType()->isVectorType())
isVectorLiteral = true;
}
else
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D88526.295654.patch
Type: text/x-patch
Size: 2420 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20201001/f7d148f2/attachment.bin>
More information about the cfe-commits
mailing list