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

Ivan Donchevskii via cfe-commits cfe-commits at lists.llvm.org
Wed Jan 3 06:41:48 PST 2018


Ok, I've asked Nikolai to recheck it on Linux and re-commited the rolled back change which is not connected with the failing one.

________________________________
From: hwennborg at google.com <hwennborg at google.com> on behalf of Hans Wennborg <hans at chromium.org>
Sent: Wednesday, January 3, 2018 3:27:48 PM
To: Ivan Donchevskii; cfe-commits
Subject: Re: r321697 - [libclang] Support querying whether a declaration is invalid

I don't, but reverting your change made the test pass again.

I was able to reproduce locally by adding -target
ppc64le-unknown-linux to the run-line in test/Index/opencl-types.cl.

On Wed, Jan 3, 2018 at 3:23 PM, Ivan Donchevskii <ivan.donchevskii at qt.io> wrote:
> Hi!
> I saw it but I don't see an issue in this change. Do you have an idea why
> that happened?
>
> ________________________________
> From: hwennborg at google.com <hwennborg at google.com> on behalf of Hans Wennborg
> <hans at chromium.org>
> Sent: Wednesday, January 3, 2018 3:21:52 PM
> To: Ivan Donchevskii
> Cc: cfe-commits
> Subject: Re: r321697 - [libclang] Support querying whether a declaration is
> invalid
>
> 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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20180103/905c157c/attachment-0001.html>


More information about the cfe-commits mailing list