r321697 - [libclang] Support querying whether a declaration is invalid

Hans Wennborg via cfe-commits cfe-commits at lists.llvm.org
Wed Jan 3 06:21:52 PST 2018


This caused failures on the buildbots. I've reverted it and the
commits that depended on it in r321708. See that commit message for
more details.

On Wed, Jan 3, 2018 at 10:49 AM, Ivan Donchevskii via cfe-commits
<cfe-commits at lists.llvm.org> wrote:
> Author: yvvan
> Date: Wed Jan  3 01:49:31 2018
> New Revision: 321697
>
> URL: http://llvm.org/viewvc/llvm-project?rev=321697&view=rev
> Log:
> [libclang] Support querying whether a declaration is invalid
>
> This is useful for e.g. highlighting purposes in an IDE.
>
> Patch by Nikolai Kosjar.
>
> Differential Revision: https://reviews.llvm.org/D40072
>
> Modified:
>     cfe/trunk/include/clang-c/Index.h
>     cfe/trunk/test/Index/print-type-size.cpp
>     cfe/trunk/tools/c-index-test/c-index-test.c
>     cfe/trunk/tools/libclang/CIndex.cpp
>     cfe/trunk/tools/libclang/libclang.exports
>
> Modified: cfe/trunk/include/clang-c/Index.h
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang-c/Index.h?rev=321697&r1=321696&r2=321697&view=diff
> ==============================================================================
> --- cfe/trunk/include/clang-c/Index.h (original)
> +++ cfe/trunk/include/clang-c/Index.h Wed Jan  3 01:49:31 2018
> @@ -29,13 +29,13 @@
>   * CINDEX_VERSION_MAJOR is intended for "major" source/ABI breaking changes.
>   *
>   * The policy about the libclang API was always to keep it source and ABI
> - * compatible, thus CINDEX_VERSION_MAJOR is expected to remain stable.
> - */
> -#define CINDEX_VERSION_MAJOR 0
> -#define CINDEX_VERSION_MINOR 45
> -
> -#define CINDEX_VERSION_ENCODE(major, minor) ( \
> -      ((major) * 10000)                       \
> + * compatible, thus CINDEX_VERSION_MAJOR is expected to remain stable.
> + */
> +#define CINDEX_VERSION_MAJOR 0
> +#define CINDEX_VERSION_MINOR 46
> +
> +#define CINDEX_VERSION_ENCODE(major, minor) ( \
> +      ((major) * 10000)                       \
>      + ((minor) *     1))
>
>  #define CINDEX_VERSION CINDEX_VERSION_ENCODE( \
> @@ -2638,12 +2638,22 @@ CINDEX_LINKAGE enum CXCursorKind clang_g
>
>  /**
>   * \brief Determine whether the given cursor kind represents a declaration.
> - */
> -CINDEX_LINKAGE unsigned clang_isDeclaration(enum CXCursorKind);
> -
> -/**
> - * \brief Determine whether the given cursor kind represents a simple
> - * reference.
> + */
> +CINDEX_LINKAGE unsigned clang_isDeclaration(enum CXCursorKind);
> +
> +/**
> + * \brief Determine whether the given declaration is invalid.
> + *
> + * A declaration is invalid if it could not be parsed successfully.
> + *
> + * \returns non-zero if the cursor represents a declaration and it is
> + * invalid, otherwise NULL.
> + */
> +CINDEX_LINKAGE unsigned clang_isInvalidDeclaration(CXCursor);
> +
> +/**
> + * \brief Determine whether the given cursor kind represents a simple
> + * reference.
>   *
>   * Note that other kinds of cursors (such as expressions) can also refer to
>   * other cursors. Use clang_getCursorReferenced() to determine whether a
>
> Modified: cfe/trunk/test/Index/print-type-size.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Index/print-type-size.cpp?rev=321697&r1=321696&r2=321697&view=diff
> ==============================================================================
> --- cfe/trunk/test/Index/print-type-size.cpp (original)
> +++ cfe/trunk/test/Index/print-type-size.cpp Wed Jan  3 01:49:31 2018
> @@ -1,14 +1,14 @@
>  // from SemaCXX/class-layout.cpp
>  // RUN: c-index-test -test-print-type-size %s -target x86_64-pc-linux-gnu | FileCheck -check-prefix=CHECK64 %s
>  // RUN: c-index-test -test-print-type-size %s -target i386-apple-darwin9 | FileCheck -check-prefix=CHECK32 %s
> -
> -namespace basic {
> -
> -// CHECK64: VarDecl=v:[[@LINE+2]]:6 (Definition) [type=void] [typekind=Void]
> -// CHECK32: VarDecl=v:[[@LINE+1]]:6 (Definition) [type=void] [typekind=Void]
> -void v;
> -
> -// CHECK64: VarDecl=v1:[[@LINE+2]]:7 (Definition) [type=void *] [typekind=Pointer] [sizeof=8] [alignof=8]
> +
> +namespace basic {
> +
> +// CHECK64: VarDecl=v:[[@LINE+2]]:6 (Definition) (invalid) [type=void] [typekind=Void]
> +// CHECK32: VarDecl=v:[[@LINE+1]]:6 (Definition) (invalid) [type=void] [typekind=Void]
> +void v;
> +
> +// CHECK64: VarDecl=v1:[[@LINE+2]]:7 (Definition) [type=void *] [typekind=Pointer] [sizeof=8] [alignof=8]
>  // CHECK32: VarDecl=v1:[[@LINE+1]]:7 (Definition) [type=void *] [typekind=Pointer] [sizeof=4] [alignof=4]
>  void *v1;
>
>
> Modified: cfe/trunk/tools/c-index-test/c-index-test.c
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/c-index-test/c-index-test.c?rev=321697&r1=321696&r2=321697&view=diff
> ==============================================================================
> --- cfe/trunk/tools/c-index-test/c-index-test.c (original)
> +++ cfe/trunk/tools/c-index-test/c-index-test.c Wed Jan  3 01:49:31 2018
> @@ -809,12 +809,14 @@ static void PrintCursor(CXCursor Cursor,
>      if (clang_EnumDecl_isScoped(Cursor))
>        printf(" (scoped)");
>      if (clang_Cursor_isVariadic(Cursor))
> -      printf(" (variadic)");
> -    if (clang_Cursor_isObjCOptional(Cursor))
> -      printf(" (@optional)");
> -
> -    switch (clang_getCursorExceptionSpecificationType(Cursor))
> -    {
> +      printf(" (variadic)");
> +    if (clang_Cursor_isObjCOptional(Cursor))
> +      printf(" (@optional)");
> +    if (clang_isInvalidDeclaration(Cursor))
> +      printf(" (invalid)");
> +
> +    switch (clang_getCursorExceptionSpecificationType(Cursor))
> +    {
>        case CXCursor_ExceptionSpecificationKind_None:
>          break;
>
>
> Modified: cfe/trunk/tools/libclang/CIndex.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/libclang/CIndex.cpp?rev=321697&r1=321696&r2=321697&view=diff
> ==============================================================================
> --- cfe/trunk/tools/libclang/CIndex.cpp (original)
> +++ cfe/trunk/tools/libclang/CIndex.cpp Wed Jan  3 01:49:31 2018
> @@ -5418,12 +5418,21 @@ unsigned clang_isInvalid(enum CXCursorKi
>
>  unsigned clang_isDeclaration(enum CXCursorKind K) {
>    return (K >= CXCursor_FirstDecl && K <= CXCursor_LastDecl) ||
> -         (K >= CXCursor_FirstExtraDecl && K <= CXCursor_LastExtraDecl);
> -}
> -
> -unsigned clang_isReference(enum CXCursorKind K) {
> -  return K >= CXCursor_FirstRef && K <= CXCursor_LastRef;
> -}
> +         (K >= CXCursor_FirstExtraDecl && K <= CXCursor_LastExtraDecl);
> +}
> +
> +unsigned clang_isInvalidDeclaration(CXCursor C) {
> +  if (clang_isDeclaration(C.kind)) {
> +    if (const Decl *D = getCursorDecl(C))
> +      return D->isInvalidDecl();
> +  }
> +
> +  return 0;
> +}
> +
> +unsigned clang_isReference(enum CXCursorKind K) {
> +  return K >= CXCursor_FirstRef && K <= CXCursor_LastRef;
> +}
>
>  unsigned clang_isExpression(enum CXCursorKind K) {
>    return K >= CXCursor_FirstExpr && K <= CXCursor_LastExpr;
>
> Modified: cfe/trunk/tools/libclang/libclang.exports
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/libclang/libclang.exports?rev=321697&r1=321696&r2=321697&view=diff
> ==============================================================================
> --- cfe/trunk/tools/libclang/libclang.exports (original)
> +++ cfe/trunk/tools/libclang/libclang.exports Wed Jan  3 01:49:31 2018
> @@ -288,12 +288,13 @@ clang_index_isEntityObjCContainerKind
>  clang_index_setClientContainer
>  clang_index_setClientEntity
>  clang_isAttribute
> -clang_isConstQualifiedType
> -clang_isCursorDefinition
> -clang_isDeclaration
> -clang_isExpression
> -clang_isFileMultipleIncludeGuarded
> -clang_isFunctionTypeVariadic
> +clang_isConstQualifiedType
> +clang_isCursorDefinition
> +clang_isDeclaration
> +clang_isInvalidDeclaration
> +clang_isExpression
> +clang_isFileMultipleIncludeGuarded
> +clang_isFunctionTypeVariadic
>  clang_isInvalid
>  clang_isPODType
>  clang_isPreprocessing
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


More information about the cfe-commits mailing list