r340182 - [ASTImporter] Add test for C++ casts and fix broken const_cast importing.
Raphael Isemann via cfe-commits
cfe-commits at lists.llvm.org
Mon Aug 20 09:20:01 PDT 2018
Author: teemperor
Date: Mon Aug 20 09:20:01 2018
New Revision: 340182
URL: http://llvm.org/viewvc/llvm-project?rev=340182&view=rev
Log:
[ASTImporter] Add test for C++ casts and fix broken const_cast importing.
Summary:
The ASTImporter does currently not handle const_casts. This patch adds the
missing const_cast importer code and the test case that discovered this.
Reviewers: a.sidorin, a_sidorin
Reviewed By: a_sidorin
Subscribers: a_sidorin, martong, cfe-commits
Differential Revision: https://reviews.llvm.org/D50932
Added:
cfe/trunk/test/Import/cxx-casts/
cfe/trunk/test/Import/cxx-casts/Inputs/
cfe/trunk/test/Import/cxx-casts/Inputs/F.cpp
cfe/trunk/test/Import/cxx-casts/test.cpp
Modified:
cfe/trunk/lib/AST/ASTImporter.cpp
cfe/trunk/tools/clang-import-test/clang-import-test.cpp
Modified: cfe/trunk/lib/AST/ASTImporter.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/ASTImporter.cpp?rev=340182&r1=340181&r2=340182&view=diff
==============================================================================
--- cfe/trunk/lib/AST/ASTImporter.cpp (original)
+++ cfe/trunk/lib/AST/ASTImporter.cpp Mon Aug 20 09:20:01 2018
@@ -6897,6 +6897,10 @@ Expr *ASTNodeImporter::VisitCXXNamedCast
return CXXReinterpretCastExpr::Create(
Importer.getToContext(), ToType, VK, CK, ToOp, &BasePath,
ToWritten, ToOperatorLoc, ToRParenLoc, ToAngleBrackets);
+ } else if (isa<CXXConstCastExpr>(E)) {
+ return CXXConstCastExpr::Create(Importer.getToContext(), ToType, VK, ToOp,
+ ToWritten, ToOperatorLoc, ToRParenLoc,
+ ToAngleBrackets);
} else {
return nullptr;
}
Added: cfe/trunk/test/Import/cxx-casts/Inputs/F.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Import/cxx-casts/Inputs/F.cpp?rev=340182&view=auto
==============================================================================
--- cfe/trunk/test/Import/cxx-casts/Inputs/F.cpp (added)
+++ cfe/trunk/test/Import/cxx-casts/Inputs/F.cpp Mon Aug 20 09:20:01 2018
@@ -0,0 +1,12 @@
+struct A {
+ virtual ~A() {}
+};
+struct B : public A {};
+
+void f() {
+ const A *b = new B();
+ const B *c1 = dynamic_cast<const B *>(b);
+ const B *c2 = static_cast<const B *>(b);
+ const B *c3 = reinterpret_cast<const B *>(b);
+ A *c4 = const_cast<A *>(b);
+}
Added: cfe/trunk/test/Import/cxx-casts/test.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Import/cxx-casts/test.cpp?rev=340182&view=auto
==============================================================================
--- cfe/trunk/test/Import/cxx-casts/test.cpp (added)
+++ cfe/trunk/test/Import/cxx-casts/test.cpp Mon Aug 20 09:20:01 2018
@@ -0,0 +1,21 @@
+// RUN: clang-import-test -dump-ast -import %S/Inputs/F.cpp -expression %s | FileCheck %s
+
+// CHECK: CXXDynamicCastExpr
+// CHECK-SAME: dynamic_cast
+// CHECK-SAME: <Dynamic>
+
+// CHECK: CXXStaticCastExpr
+// CHECK-SAME: static_cast
+// CHECK-SAME: <BaseToDerived (A)>
+
+// CHECK: CXXReinterpretCastExpr
+// CHECK-SAME: reinterpret_cast
+// CHECK-SAME: <BitCast>
+
+// CHECK: CXXConstCastExpr
+// CHECK-SAME: const_cast
+// CHECK-SAME: <NoOp>
+
+void expr() {
+ f();
+}
Modified: cfe/trunk/tools/clang-import-test/clang-import-test.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/clang-import-test/clang-import-test.cpp?rev=340182&r1=340181&r2=340182&view=diff
==============================================================================
--- cfe/trunk/tools/clang-import-test/clang-import-test.cpp (original)
+++ cfe/trunk/tools/clang-import-test/clang-import-test.cpp Mon Aug 20 09:20:01 2018
@@ -194,6 +194,8 @@ std::unique_ptr<CompilerInstance> BuildC
Inv->getLangOpts()->ThreadsafeStatics = false;
Inv->getLangOpts()->AccessControl = false;
Inv->getLangOpts()->DollarIdents = true;
+ // Needed for testing dynamic_cast.
+ Inv->getLangOpts()->RTTI = true;
Inv->getCodeGenOpts().setDebugInfo(codegenoptions::FullDebugInfo);
Inv->getTargetOpts().Triple = llvm::sys::getDefaultTargetTriple();
More information about the cfe-commits
mailing list