summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--llvm/test/tools/llvm-pdbdump/Inputs/TypeQualifiersTest.cpp55
-rw-r--r--llvm/test/tools/llvm-pdbdump/Inputs/TypeQualifiersTest.pdb0
-rw-r--r--llvm/test/tools/llvm-pdbdump/type-qualifiers.test25
-rw-r--r--llvm/tools/llvm-pdbutil/PrettyFunctionDumper.cpp3
-rw-r--r--llvm/tools/llvm-pdbutil/PrettyTypedefDumper.cpp3
-rw-r--r--llvm/tools/llvm-pdbutil/PrettyVariableDumper.cpp6
6 files changed, 92 insertions, 0 deletions
diff --git a/llvm/test/tools/llvm-pdbdump/Inputs/TypeQualifiersTest.cpp b/llvm/test/tools/llvm-pdbdump/Inputs/TypeQualifiersTest.cpp
new file mode 100644
index 00000000000..02dce9f611d
--- /dev/null
+++ b/llvm/test/tools/llvm-pdbdump/Inputs/TypeQualifiersTest.cpp
@@ -0,0 +1,55 @@
+// Compile with "cl /c /Zi /GR- TypeQualifiersTest.cpp"
+// Link with "link TypeQualifiersTest.obj /debug /nodefaultlib /entry:main"
+
+union Union {
+ int * __restrict x_member;
+ float * __restrict y_member;
+ int* volatile __restrict m_volatile;
+ const char* m_const;
+};
+
+int f(const volatile int* __restrict arg_crv) {
+ Union u;
+ return 1;
+}
+
+void g(int& __restrict arg_ref) {
+}
+
+namespace NS {
+ class Class {
+ public:
+ int get() const { return 1;}
+ int set() __restrict { return 2; }
+ void help() volatile { return; }
+ };
+
+ struct Foo {
+ int a;
+ int b;
+ int func(int x) __restrict { return 1; }
+ };
+
+ Foo s = { 10 };
+
+ const int* __restrict p_object = &s.a;
+
+ volatile int Foo:: * __restrict p_data_member = &Foo::a;
+
+ int (Foo::* p_member_func)(int) __restrict = &Foo::func;
+}
+
+typedef long* __restrict RestrictTypedef;
+RestrictTypedef RestrictVar;
+
+typedef volatile int* __restrict RankNArray[10][100];
+RankNArray ArrayVar;
+
+int main() {
+ NS::Class ClassVar;
+ ClassVar.get();
+ ClassVar.help();
+ ClassVar.set();
+
+ return 0;
+}
diff --git a/llvm/test/tools/llvm-pdbdump/Inputs/TypeQualifiersTest.pdb b/llvm/test/tools/llvm-pdbdump/Inputs/TypeQualifiersTest.pdb
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/llvm/test/tools/llvm-pdbdump/Inputs/TypeQualifiersTest.pdb
diff --git a/llvm/test/tools/llvm-pdbdump/type-qualifiers.test b/llvm/test/tools/llvm-pdbdump/type-qualifiers.test
new file mode 100644
index 00000000000..ff68e2ff95c
--- /dev/null
+++ b/llvm/test/tools/llvm-pdbdump/type-qualifiers.test
@@ -0,0 +1,25 @@
+; RUN: llvm-pdbutil pretty -all -class-recurse-depth=1 \
+; RUN: %p/Inputs/TypeQualifiersTest.pdb > %t
+; RUN: FileCheck -input-file=%t %s -check-prefix=GLOBALS_FUNC
+; RUN: FileCheck -input-file=%t %s -check-prefix=GLOBALS_DATA
+; RUN: FileCheck -input-file=%t %s -check-prefix=QUALS
+
+; GLOBALS_FUNC: ---GLOBALS---
+; GLOBALS_FUNC-DAG: int __cdecl f(const volatile int* __restrict arg_crv)
+; GLOBALS_FUNC-DAG: void __cdecl g(int& __restrict arg_ref)
+
+; GLOBALS_DATA: ---GLOBALS---
+; GLOBALS_DATA-DAG: static volatile int* __restrict ArrayVar[10][100]
+; GLOBALS_DATA-DAG: static long* __restrict RestrictVar
+; GLOBALS_DATA-DAG: static const int* __restrict NS::p_object
+; GLOBALS_DATA-DAG: static NS::Foo NS::s
+; GLOBALS_DATA-DAG: static volatile int* __restrict NS::p_data_member
+
+; QUALS: ---TYPES---
+; QUALS-DAG: typedef RankNArray
+; QUALS-DAG: typedef long* __restrict RestrictTypedef
+; QUALS: union Union
+; QUALS-DAG: int* __restrict x_member
+; QUALS-DAG: float* __restrict y_member
+; QUALS-DAG: int* volatile __restrict m_volatile
+; QUALS-DAG: const char* m_const
diff --git a/llvm/tools/llvm-pdbutil/PrettyFunctionDumper.cpp b/llvm/tools/llvm-pdbutil/PrettyFunctionDumper.cpp
index 13df74f20d5..177d8a009a2 100644
--- a/llvm/tools/llvm-pdbutil/PrettyFunctionDumper.cpp
+++ b/llvm/tools/llvm-pdbutil/PrettyFunctionDumper.cpp
@@ -252,6 +252,9 @@ void FunctionDumper::dump(const PDBSymbolTypePointer &Symbol) {
WithColor(Printer, PDB_ColorItem::Keyword).get() << "volatile ";
PointeeType->dump(*this);
Printer << (Symbol.isReference() ? "&" : "*");
+
+ if (Symbol.getRawSymbol().isRestrictedType())
+ WithColor(Printer, PDB_ColorItem::Keyword).get() << " __restrict";
}
}
diff --git a/llvm/tools/llvm-pdbutil/PrettyTypedefDumper.cpp b/llvm/tools/llvm-pdbutil/PrettyTypedefDumper.cpp
index ba3b4c8035c..65443d6bca9 100644
--- a/llvm/tools/llvm-pdbutil/PrettyTypedefDumper.cpp
+++ b/llvm/tools/llvm-pdbutil/PrettyTypedefDumper.cpp
@@ -63,6 +63,9 @@ void TypedefDumper::dump(const PDBSymbolTypePointer &Symbol) {
PointeeType->dump(*this);
Printer << ((Symbol.isReference()) ? "&" : "*");
}
+
+ if (Symbol.getRawSymbol().isRestrictedType())
+ WithColor(Printer, PDB_ColorItem::Keyword).get() << " __restrict";
}
void TypedefDumper::dump(const PDBSymbolTypeFunctionSig &Symbol) {
diff --git a/llvm/tools/llvm-pdbutil/PrettyVariableDumper.cpp b/llvm/tools/llvm-pdbutil/PrettyVariableDumper.cpp
index 4884fc8ee5a..ddac8cf0da4 100644
--- a/llvm/tools/llvm-pdbutil/PrettyVariableDumper.cpp
+++ b/llvm/tools/llvm-pdbutil/PrettyVariableDumper.cpp
@@ -169,6 +169,9 @@ void VariableDumper::dumpRight(const PDBSymbolTypeFunctionSig &Symbol) {
WithColor(Printer, PDB_ColorItem::Keyword).get() << " const";
if (Symbol.isVolatileType())
WithColor(Printer, PDB_ColorItem::Keyword).get() << " volatile";
+
+ if (Symbol.getRawSymbol().isRestrictedType())
+ WithColor(Printer, PDB_ColorItem::Keyword).get() << " __restrict";
}
void VariableDumper::dump(const PDBSymbolTypePointer &Symbol) {
@@ -189,6 +192,9 @@ void VariableDumper::dump(const PDBSymbolTypePointer &Symbol) {
WithColor(Printer, PDB_ColorItem::Keyword).get() << " const ";
if (Symbol.isVolatileType())
WithColor(Printer, PDB_ColorItem::Keyword).get() << " volatile ";
+
+ if (Symbol.getRawSymbol().isRestrictedType())
+ WithColor(Printer, PDB_ColorItem::Keyword).get() << " __restrict ";
}
void VariableDumper::dumpRight(const PDBSymbolTypePointer &Symbol) {
OpenPOWER on IntegriCloud