diff options
author | Erick Velez <erickvelez7@gmail.com> | 2023-08-04 07:16:59 -0700 |
---|---|---|
committer | Erick Velez <erickvelez7@gmail.com> | 2023-08-04 07:19:24 -0700 |
commit | 75f55eb331e0e9d8edb60115739b1b4794188df8 (patch) | |
tree | c2b81854aa418798195d87ed17178e77e51f0b3f /clang/test/ExtractAPI/operator_overload.cpp | |
parent | 5d492766a8fbfadb39c9830ebb64137edddfe0e5 (diff) | |
download | llvm-75f55eb331e0e9d8edb60115739b1b4794188df8.zip llvm-75f55eb331e0e9d8edb60115739b1b4794188df8.tar.gz llvm-75f55eb331e0e9d8edb60115739b1b4794188df8.tar.bz2 |
[clang][ExtractAPI] Add support for C++ classes with fix
Reintroduce D153557 with fix for use-after-free from f4de606ef271 and minor changes.
Reviewed By: dang
Differential Revision: https://reviews.llvm.org/D157007
Diffstat (limited to 'clang/test/ExtractAPI/operator_overload.cpp')
-rw-r--r-- | clang/test/ExtractAPI/operator_overload.cpp | 210 |
1 files changed, 210 insertions, 0 deletions
diff --git a/clang/test/ExtractAPI/operator_overload.cpp b/clang/test/ExtractAPI/operator_overload.cpp new file mode 100644 index 0000000..084038e --- /dev/null +++ b/clang/test/ExtractAPI/operator_overload.cpp @@ -0,0 +1,210 @@ +// RUN: rm -rf %t +// RUN: split-file %s %t +// RUN: sed -e "s@INPUT_DIR@%{/t:regex_replacement}@g" \ +// RUN: %t/reference.output.json.in >> %t/reference.output.json +// RUN: %clang_cc1 -extract-api -triple arm64-apple-macosx \ +// RUN: -x c++-header %t/input.h -o %t/output.json -verify + +// Generator version is not consistent across test runs, normalize it. +// RUN: sed -e "s@\"generator\": \".*\"@\"generator\": \"?\"@g" \ +// RUN: %t/output.json >> %t/output-normalized.json +// RUN: diff %t/reference.output.json %t/output-normalized.json + +//--- input.h +class Foo { + int operator+(int x); +}; +/// expected-no-diagnostics + +//--- reference.output.json.in +{ + "metadata": { + "formatVersion": { + "major": 0, + "minor": 5, + "patch": 3 + }, + "generator": "?" + }, + "module": { + "name": "", + "platform": { + "architecture": "arm64", + "operatingSystem": { + "minimumVersion": { + "major": 11, + "minor": 0, + "patch": 0 + }, + "name": "macosx" + }, + "vendor": "apple" + } + }, + "relationships": [ + { + "kind": "memberOf", + "source": "c:@S@Foo@F@operator+#I#", + "target": "c:@S@Foo", + "targetFallback": "Foo" + } + ], + "symbols": [ + { + "accessLevel": "public", + "declarationFragments": [ + { + "kind": "keyword", + "spelling": "class" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "identifier", + "spelling": "Foo" + }, + { + "kind": "text", + "spelling": ";" + } + ], + "identifier": { + "interfaceLanguage": "c++", + "precise": "c:@S@Foo" + }, + "kind": { + "displayName": "Class", + "identifier": "c++.class" + }, + "location": { + "position": { + "character": 7, + "line": 1 + }, + "uri": "file://INPUT_DIR/input.h" + }, + "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "Foo" + } + ], + "subHeading": [ + { + "kind": "identifier", + "spelling": "Foo" + } + ], + "title": "Foo" + }, + "pathComponents": [ + "Foo" + ] + }, + { + "accessLevel": "private", + "declarationFragments": [ + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:I", + "spelling": "int" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "identifier", + "spelling": "operator+" + }, + { + "kind": "text", + "spelling": "(" + }, + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:I", + "spelling": "int" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "internalParam", + "spelling": "x" + }, + { + "kind": "text", + "spelling": ");" + } + ], + "functionSignature": { + "parameters": [ + { + "declarationFragments": [ + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:I", + "spelling": "int" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "internalParam", + "spelling": "x" + } + ], + "name": "x" + } + ], + "returns": [ + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:I", + "spelling": "int" + } + ] + }, + "identifier": { + "interfaceLanguage": "c++", + "precise": "c:@S@Foo@F@operator+#I#" + }, + "kind": { + "displayName": "Instance Method", + "identifier": "c++.method" + }, + "location": { + "position": { + "character": 7, + "line": 2 + }, + "uri": "file://INPUT_DIR/input.h" + }, + "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "operator+" + } + ], + "subHeading": [ + { + "kind": "identifier", + "spelling": "operator+" + } + ], + "title": "operator+" + }, + "pathComponents": [ + "Foo", + "operator+" + ] + } + ] +} |