From e81744563a53b1ed0aaa2cefda885287974a9e21 Mon Sep 17 00:00:00 2001 From: Erick Velez Date: Tue, 22 Aug 2023 14:51:23 -0700 Subject: [clang][ExtractAPI] Fix bool spelling coming from the macro definition. getFragmentsForType resulted in a bool typeIdentifier fragment to be spelled "_Bool". This fixes the spelling to be "bool" and checks it in C and C++. Reviewed By: dang Differential Revision: https://reviews.llvm.org/D158474 --- clang/test/ExtractAPI/bool.c | 204 +++++++++++++++++++++++++++++++++++++++++ clang/test/ExtractAPI/bool.cpp | 203 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 407 insertions(+) create mode 100644 clang/test/ExtractAPI/bool.c create mode 100644 clang/test/ExtractAPI/bool.cpp (limited to 'clang/test/ExtractAPI') diff --git a/clang/test/ExtractAPI/bool.c b/clang/test/ExtractAPI/bool.c new file mode 100644 index 0000000..fc01379 --- /dev/null +++ b/clang/test/ExtractAPI/bool.c @@ -0,0 +1,204 @@ +// 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 -extract-api -target arm64-apple-macosx \ +// RUN: %t/input.h -o %t/output.json + +// 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 +#include +bool Foo; + +bool IsFoo(bool Bar); +/// 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": [], + "symbols": [ + { + "accessLevel": "public", + "declarationFragments": [ + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:b", + "spelling": "bool" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "identifier", + "spelling": "Foo" + }, + { + "kind": "text", + "spelling": ";" + } + ], + "identifier": { + "interfaceLanguage": "c", + "precise": "c:@Foo" + }, + "kind": { + "displayName": "Global Variable", + "identifier": "c.var" + }, + "location": { + "position": { + "character": 6, + "line": 2 + }, + "uri": "file://INPUT_DIR/input.h" + }, + "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "Foo" + } + ], + "subHeading": [ + { + "kind": "identifier", + "spelling": "Foo" + } + ], + "title": "Foo" + }, + "pathComponents": [ + "Foo" + ] + }, + { + "accessLevel": "public", + "declarationFragments": [ + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:b", + "spelling": "bool" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "identifier", + "spelling": "IsFoo" + }, + { + "kind": "text", + "spelling": "(" + }, + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:b", + "spelling": "bool" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "internalParam", + "spelling": "Bar" + }, + { + "kind": "text", + "spelling": ");" + } + ], + "functionSignature": { + "parameters": [ + { + "declarationFragments": [ + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:b", + "spelling": "bool" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "internalParam", + "spelling": "Bar" + } + ], + "name": "Bar" + } + ], + "returns": [ + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:b", + "spelling": "bool" + } + ] + }, + "identifier": { + "interfaceLanguage": "c", + "precise": "c:@F@IsFoo" + }, + "kind": { + "displayName": "Function", + "identifier": "c.func" + }, + "location": { + "position": { + "character": 6, + "line": 4 + }, + "uri": "file://INPUT_DIR/input.h" + }, + "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "IsFoo" + } + ], + "subHeading": [ + { + "kind": "identifier", + "spelling": "IsFoo" + } + ], + "title": "IsFoo" + }, + "pathComponents": [ + "IsFoo" + ] + } + ] +} diff --git a/clang/test/ExtractAPI/bool.cpp b/clang/test/ExtractAPI/bool.cpp new file mode 100644 index 0000000..88f753c --- /dev/null +++ b/clang/test/ExtractAPI/bool.cpp @@ -0,0 +1,203 @@ +// 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 +bool Foo; + +bool IsFoo(bool Bar); +/// 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": [], + "symbols": [ + { + "accessLevel": "public", + "declarationFragments": [ + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:b", + "spelling": "bool" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "identifier", + "spelling": "Foo" + }, + { + "kind": "text", + "spelling": ";" + } + ], + "identifier": { + "interfaceLanguage": "c++", + "precise": "c:@Foo" + }, + "kind": { + "displayName": "Global Variable", + "identifier": "c++.var" + }, + "location": { + "position": { + "character": 6, + "line": 1 + }, + "uri": "file://INPUT_DIR/input.h" + }, + "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "Foo" + } + ], + "subHeading": [ + { + "kind": "identifier", + "spelling": "Foo" + } + ], + "title": "Foo" + }, + "pathComponents": [ + "Foo" + ] + }, + { + "accessLevel": "public", + "declarationFragments": [ + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:b", + "spelling": "bool" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "identifier", + "spelling": "IsFoo" + }, + { + "kind": "text", + "spelling": "(" + }, + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:b", + "spelling": "bool" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "internalParam", + "spelling": "Bar" + }, + { + "kind": "text", + "spelling": ");" + } + ], + "functionSignature": { + "parameters": [ + { + "declarationFragments": [ + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:b", + "spelling": "bool" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "internalParam", + "spelling": "Bar" + } + ], + "name": "Bar" + } + ], + "returns": [ + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:b", + "spelling": "bool" + } + ] + }, + "identifier": { + "interfaceLanguage": "c++", + "precise": "c:@F@IsFoo#b#" + }, + "kind": { + "displayName": "Function", + "identifier": "c++.func" + }, + "location": { + "position": { + "character": 6, + "line": 3 + }, + "uri": "file://INPUT_DIR/input.h" + }, + "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "IsFoo" + } + ], + "subHeading": [ + { + "kind": "identifier", + "spelling": "IsFoo" + } + ], + "title": "IsFoo" + }, + "pathComponents": [ + "IsFoo" + ] + } + ] +} -- cgit v1.1