Author: asmith
Date: Mon Mar 11 19:00:39 2019
New Revision: 355890

URL: http://llvm.org/viewvc/llvm-project?rev=355890&view=rev
Log:
[DebugInfo] Add test cases for FlagNonTrivial

Summary:
This is a test case to go with D44406 which added FlagNonTrivial to mark that a 
C++ record is non-trivial to support CodeView debug emission. 

While it looks like FlagTypePassByValue can imply triviality and 
FlagTypePassByReference can imply non-triviality that is not true. Some 
non-trivial cases use a combination of FlagNonTrivial and FlagTypePassByValue 
instead of FlagTypePassByReference. See the test cases and D44406 for 
discussion.

Reviewers: dblaikie, rnk, zturner

Reviewed By: dblaikie

Subscribers: jdoerfert, llvm-commits

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D59010

Added:
    cfe/trunk/test/CodeGenCXX/debug-info-composite-triviality.cpp

Added: cfe/trunk/test/CodeGenCXX/debug-info-composite-triviality.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/debug-info-composite-triviality.cpp?rev=355890&view=auto
==============================================================================
--- cfe/trunk/test/CodeGenCXX/debug-info-composite-triviality.cpp (added)
+++ cfe/trunk/test/CodeGenCXX/debug-info-composite-triviality.cpp Mon Mar 11 
19:00:39 2019
@@ -0,0 +1,90 @@
+// RUN: %clang_cc1 -emit-llvm -debug-info-kind=standalone -triple 
%itanium_abi_triple %s -o - | FileCheck %s
+
+// Cases to show some non-trivial types with flags combined with 
DIFlagNonTrivial and DIFlagTypePassByValue.
+
+// CHECK-DAG: !DICompositeType({{.*}}, name: "Explicit",{{.*}}flags: 
DIFlagTypePassByValue | DIFlagNonTrivial
+struct Explicit {
+  explicit Explicit();
+  int a;
+} Explicit;
+
+// CHECK-DAG: !DICompositeType({{.*}}, name: "Struct",{{.*}}flags: 
DIFlagTypePassByValue | DIFlagNonTrivial
+struct Struct {
+  Struct() {}
+} Struct;
+
+// CHECK-DAG: !DICompositeType({{.*}}, name: "Annotated",{{.*}}flags: 
DIFlagTypePassByValue | DIFlagNonTrivial
+struct __attribute__((trivial_abi)) Annotated {
+  Annotated() {};
+} Annotated;
+
+
+// Check a non-composite type
+// CHECK-DAG: !DIGlobalVariable(name: "GlobalVar", {{.*}}type: {{.*}}, 
isLocal: false, isDefinition: true)
+int GlobalVar = 0;
+
+// Cases to test composite type's triviality
+
+// CHECK-DAG: !DICompositeType({{.*}}, name: "Union",{{.*}}flags: 
{{.*}}DIFlagTrivial
+union Union {
+  int a;
+} Union;
+
+// CHECK-DAG: !DICompositeType({{.*}}, name: "Trivial",{{.*}}flags: 
{{.*}}DIFlagTrivial
+struct Trivial {
+  int i;
+} Trivial;
+
+// CHECK-DAG: !DICompositeType({{.*}}, name: "TrivialA",{{.*}}flags: 
{{.*}}DIFlagTrivial
+struct TrivialA {
+  TrivialA() = default;
+} TrivialA;
+
+// CHECK-DAG: !DICompositeType({{.*}}, name: "TrivialB",{{.*}}flags: 
{{.*}}DIFlagTrivial
+struct TrivialB {
+  int m;
+  TrivialB(int x) { m = x; }
+  TrivialB() = default;
+} TrivialB;
+
+// CHECK-DAG: !DICompositeType({{.*}}, name: "TrivialC",{{.*}}flags: 
{{.*}}DIFlagTrivial
+struct TrivialC {
+  struct Trivial x;
+} TrivialC;
+
+// CHECK-DAG: !DICompositeType({{.*}}, name: "TrivialD",{{.*}}flags: 
{{.*}}DIFlagTrivial
+struct NT {
+  NT() {};
+};
+struct TrivialD {
+  static struct NT x; // Member is non-trivial but is static.
+} TrivialD;
+
+
+// CHECK-DAG: !DICompositeType({{.*}}, name: "NonTrivial",{{.*}}flags: 
{{.*}}DIFlagNonTrivial
+struct NonTrivial {
+  NonTrivial() {}
+} NonTrivial;
+
+// CHECK-DAG: !DICompositeType({{.*}}, name: "NonTrivialA",{{.*}}flags: 
{{.*}}DIFlagNonTrivial
+struct NonTrivialA {
+  ~NonTrivialA();
+} NonTrivialA;
+
+// CHECK-DAG: !DICompositeType({{.*}}, name: "NonTrivialB",{{.*}}flags: 
{{.*}}DIFlagNonTrivial
+struct NonTrivialB {
+  struct NonTrivial x;
+} NonTrivialB;
+
+// CHECK-DAG: !DICompositeType({{.*}}, name: "NonTrivialC",{{.*}}flags: 
{{.*}}DIFlagNonTrivial
+struct NonTrivialC {
+  virtual void f() {}
+} NonTrivialC;
+
+// CHECK-DAG: !DICompositeType({{.*}}, name: "NonTrivialD",{{.*}}flags: 
{{.*}}DIFlagNonTrivial
+struct NonTrivialD : NonTrivial {
+} NonTrivialD;
+
+// CHECK-DAG: !DICompositeType({{.*}}, name: "NonTrivialE",{{.*}}flags: 
{{.*}}DIFlagNonTrivial
+struct NonTrivialE : Trivial, NonTrivial {
+} NonTrivialE;


_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to