[PATCH] D74116: [Sema][C++] Strawman patch to propagate conversion type in order to specialize the diagnostics

Anastasia Stulova via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Fri Feb 14 09:45:13 PST 2020


Anastasia added a comment.



> It looks like there's already some type analysis in `DiagnoseAssignmentResult` to get a specialized diagnostic for certain cases of function-pointer assignment.  That could probably be easily moved into `CheckAssignmentConstraints` by just adding a few more cases to `AssignConvertResult`.

One interesting effect I get after modifying this that some extra tests in C mode started to report function pointer instead of generic pointer warning. I feel this is because in `checkPointerTypesForAssignment`  we use canonical types and in `DiagnoseAssignmentResult` we don't.

Perhaps this way is better? I can update the test if so and then finalize some other bits.

  FAIL: Clang :: Sema/block-return.c (9341 of 16808)
  ******************** TEST 'Clang :: Sema/block-return.c' FAILED ********************
  Script:
  --
  : 'RUN: at line 1';   <...>build/bin/clang -cc1 -internal-isystem <...>build/lib/clang/11.0.0/include -nostdsysteminc -Wno-int-to-pointer-cast -pedantic -fsyntax-only <...>clang/test/Sema/block-return.c -verify -fblocks
  --
  Exit Code: 1
  
  Command Output (stderr):
  --
  error: 'warning' diagnostics expected but not seen: 
    File <...>clang/test/Sema/block-return.c Line 82: incompatible pointer types initializing 'int (*)(const char *)' with an expression of type 'int (char *)'
  error: 'warning' diagnostics seen but not expected: 
    File <...>clang/test/Sema/block-return.c Line 82: incompatible function pointer types initializing 'int (*)(const char *)' with an expression of type 'int (char *)'
  2 errors generated.
  
  --
  
  ********************
  FAIL: Clang :: Sema/callingconv-ms_abi.c (9396 of 16808)
  ******************** TEST 'Clang :: Sema/callingconv-ms_abi.c' FAILED ********************
  Script:
  --
  : 'RUN: at line 1';   <...>build/bin/clang -cc1 -internal-isystem <...>build/lib/clang/11.0.0/include -nostdsysteminc -fsyntax-only -verify -triple x86_64-pc-win32 <...>clang/test/Sema/callingconv-ms_abi.c
  --
  Exit Code: 1
  
  Command Output (stderr):
  --
  error: 'warning' diagnostics expected but not seen: 
    File <...>clang/test/Sema/callingconv-ms_abi.c Line 7: incompatible pointer types
    File <...>clang/test/Sema/callingconv-ms_abi.c Line 9: incompatible pointer types
  error: 'warning' diagnostics seen but not expected: 
    File <...>clang/test/Sema/callingconv-ms_abi.c Line 7: incompatible function pointer types initializing 'void (*)(void)' with an expression of type 'void (void) __attribute__((sysv_abi))'
    File <...>clang/test/Sema/callingconv-ms_abi.c Line 9: incompatible function pointer types initializing 'void (*)(void) __attribute__((sysv_abi))' with an expression of type 'void (void) __attribute__((ms_abi))'
  4 errors generated.
  
  --
  
  ********************
  FAIL: Clang :: Sema/callingconv-sysv_abi.c (9397 of 16808)
  ******************** TEST 'Clang :: Sema/callingconv-sysv_abi.c' FAILED ********************
  Script:
  --
  : 'RUN: at line 1';   <...>build/bin/clang -cc1 -internal-isystem <...>build/lib/clang/11.0.0/include -nostdsysteminc -fsyntax-only -verify -triple x86_64-pc-linux-gnu <...>clang/test/Sema/callingconv-sysv_abi.c
  --
  Exit Code: 1
  
  Command Output (stderr):
  --
  error: 'warning' diagnostics expected but not seen: 
    File <...>clang/test/Sema/callingconv-sysv_abi.c Line 4: incompatible pointer types
    File <...>clang/test/Sema/callingconv-sysv_abi.c Line 9: incompatible pointer types
  error: 'warning' diagnostics seen but not expected: 
    File <...>clang/test/Sema/callingconv-sysv_abi.c Line 4: incompatible function pointer types initializing 'void (*)(void)' with an expression of type 'void (void) __attribute__((ms_abi))'
    File <...>clang/test/Sema/callingconv-sysv_abi.c Line 9: incompatible function pointer types initializing 'void (*)(void) __attribute__((ms_abi))' with an expression of type 'void (void) __attribute__((sysv_abi))'
  4 errors generated.
  
  --
  
  ********************
  FAIL: Clang :: Sema/callingconv.c (9398 of 16808)
  ******************** TEST 'Clang :: Sema/callingconv.c' FAILED ********************
  Script:
  --
  : 'RUN: at line 1';   <...>build/bin/clang -cc1 -internal-isystem <...>build/lib/clang/11.0.0/include -nostdsysteminc <...>clang/test/Sema/callingconv.c -fsyntax-only -triple i386-unknown-unknown -verify
  : 'RUN: at line 2';   <...>build/bin/clang -cc1 -internal-isystem <...>build/lib/clang/11.0.0/include -nostdsysteminc <...>clang/test/Sema/callingconv.c -fsyntax-only -triple i386-unknown-unknown -fms-compatibility -DWIN -verify
  --
  Exit Code: 1
  
  Command Output (stderr):
  --
  error: 'warning' diagnostics expected but not seen: 
    File <...>clang/test/Sema/callingconv.c Line 34: incompatible pointer types
  error: 'warning' diagnostics seen but not expected: 
    File <...>clang/test/Sema/callingconv.c Line 34: incompatible function pointer types initializing 'void (*)(void) __attribute__((cdecl))' with an expression of type 'void (void) __attribute__((fastcall))'
  2 errors generated.
  
  --
  
  ********************
  FAIL: Clang :: Sema/pass-object-size.c (9608 of 16808)
  ******************** TEST 'Clang :: Sema/pass-object-size.c' FAILED ********************
  Script:
  --
  : 'RUN: at line 1';   <...>build/bin/clang -cc1 -internal-isystem <...>build/lib/clang/11.0.0/include -nostdsysteminc -fsyntax-only -verify <...>clang/test/Sema/pass-object-size.c -triple x86_64-linux-gnu -Wincompatible-pointer-types
  --
  Exit Code: 1
  
  Command Output (stderr):
  --
  error: 'warning' diagnostics expected but not seen: 
    File <...>clang/test/Sema/pass-object-size.c Line 47: incompatible pointer types initializing 'void (*)(void *)' with an expression of type '<overloaded function type>'
    File <...>clang/test/Sema/pass-object-size.c Line 48: incompatible pointer types initializing 'void (*)(void *)' with an expression of type '<overloaded function type>'
  error: 'warning' diagnostics seen but not expected: 
    File <...>clang/test/Sema/pass-object-size.c Line 47: incompatible function pointer types initializing 'void (*)(void *)' with an expression of type '<overloaded function type>'
    File <...>clang/test/Sema/pass-object-size.c Line 48: incompatible function pointer types initializing 'void (*)(void *)' with an expression of type '<overloaded function type>'
  4 errors generated.
  
  --
  
  ********************
  FAIL: Clang :: Sema/overloadable.c (9609 of 16808)
  ******************** TEST 'Clang :: Sema/overloadable.c' FAILED ********************
  Script:
  --
  : 'RUN: at line 1';   <...>build/bin/clang -cc1 -internal-isystem <...>build/lib/clang/11.0.0/include -nostdsysteminc -fsyntax-only -verify <...>clang/test/Sema/overloadable.c -Wincompatible-pointer-types
  --
  Exit Code: 1
  
  Command Output (stderr):
  --
  error: 'error' diagnostics expected but not seen: 
    File <...>clang/test/Sema/overloadable.c Line 29: call to 'accept_funcptr' is ambiguous
  error: 'error' diagnostics seen but not expected: 
    File <...>clang/test/Sema/overloadable.c Line 29: no matching function for call to 'accept_funcptr'
  error: 'warning' diagnostics expected but not seen: 
    File <...>clang/test/Sema/overloadable.c Line 122: incompatible pointer types initializing 'void (*)(void *)' with an expression of type '<overloaded function type>'
    File <...>clang/test/Sema/overloadable.c Line 123: incompatible pointer types initializing 'void (*)(int *)' with an expression of type '<overloaded function type>'
  error: 'warning' diagnostics seen but not expected: 
    File <...>clang/test/Sema/overloadable.c Line 122: incompatible function pointer types initializing 'void (*)(void *)' with an expression of type '<overloaded function type>'
    File <...>clang/test/Sema/overloadable.c Line 123: incompatible function pointer types initializing 'void (*)(int *)' with an expression of type '<overloaded function type>'
  6 errors generated.
  
  --
  
  ********************
  FAIL: Clang :: Sema/preserve-call-conv.c (9653 of 16808)
  ******************** TEST 'Clang :: Sema/preserve-call-conv.c' FAILED ********************
  Script:
  --
  : 'RUN: at line 1';   <...>build/bin/clang -cc1 -internal-isystem <...>build/lib/clang/11.0.0/include -nostdsysteminc <...>clang/test/Sema/preserve-call-conv.c -fsyntax-only -triple x86_64-unknown-unknown -verify
  : 'RUN: at line 2';   <...>build/bin/clang -cc1 -internal-isystem <...>build/lib/clang/11.0.0/include -nostdsysteminc <...>clang/test/Sema/preserve-call-conv.c -fsyntax-only -triple arm64-unknown-unknown -verify
  : 'RUN: at line 3';   <...>build/bin/clang -cc1 -internal-isystem <...>build/lib/clang/11.0.0/include -nostdsysteminc <...>clang/test/Sema/preserve-call-conv.c -fsyntax-only -triple x86_64-unknown-windows-msvc -verify
  : 'RUN: at line 4';   <...>build/bin/clang -cc1 -internal-isystem <...>build/lib/clang/11.0.0/include -nostdsysteminc <...>clang/test/Sema/preserve-call-conv.c -fsyntax-only -triple aarch64-unknown-windows-msvc -verify
  : 'RUN: at line 5';   <...>build/bin/clang -cc1 -internal-isystem <...>build/lib/clang/11.0.0/include -nostdsysteminc <...>clang/test/Sema/preserve-call-conv.c -fsyntax-only -triple thumbv7-unknown-windows-msvc -verify
  --
  Exit Code: 1
  
  Command Output (stderr):
  --
  error: 'warning' diagnostics expected but not seen: 
    File <...>clang/test/Sema/preserve-call-conv.c Line 17: incompatible pointer types initializing 'void (*)(void *) __attribute__((cdecl))' with an expression of type 'void (void *) __attribute__((preserve_most))'
    File <...>clang/test/Sema/preserve-call-conv.c Line 18: incompatible pointer types initializing 'void (*)(void *)' with an expression of type 'void (void *) __attribute__((preserve_most))'
    File <...>clang/test/Sema/preserve-call-conv.c Line 33: incompatible pointer types initializing 'void (*)(void *) __attribute__((cdecl))' with an expression of type 'void (void *) __attribute__((preserve_all))'
    File <...>clang/test/Sema/preserve-call-conv.c Line 34: incompatible pointer types initializing 'void (*)(void *)' with an expression of type 'void (void *) __attribute__((preserve_all))'
  error: 'warning' diagnostics seen but not expected: 
    File <...>clang/test/Sema/preserve-call-conv.c Line 17: incompatible function pointer types initializing 'void (*)(void *) __attribute__((cdecl))' with an expression of type 'void (void *) __attribute__((preserve_most))'
    File <...>clang/test/Sema/preserve-call-conv.c Line 18: incompatible function pointer types initializing 'void (*)(void *)' with an expression of type 'void (void *) __attribute__((preserve_most))'
    File <...>clang/test/Sema/preserve-call-conv.c Line 33: incompatible function pointer types initializing 'void (*)(void *) __attribute__((cdecl))' with an expression of type 'void (void *) __attribute__((preserve_all))'
    File <...>clang/test/Sema/preserve-call-conv.c Line 34: incompatible function pointer types initializing 'void (*)(void *)' with an expression of type 'void (void *) __attribute__((preserve_all))'
  8 errors generated.
  
  --
  
  ********************
  FAIL: Clang :: SemaObjC/comptypes-legal.m (10887 of 16808)
  ******************** TEST 'Clang :: SemaObjC/comptypes-legal.m' FAILED ********************
  Script:
  --
  : 'RUN: at line 1';   <...>build/bin/clang -cc1 -internal-isystem <...>build/lib/clang/11.0.0/include -nostdsysteminc -fsyntax-only -verify -pedantic <...>clang/test/SemaObjC/comptypes-legal.m
  --
  Exit Code: 1
  
  Command Output (stderr):
  --
  error: 'warning' diagnostics expected but not seen: 
    File <...>clang/test/SemaObjC/comptypes-legal.m Line 36: incompatible pointer types sending 'NSObject *(NSObject *, NSObject *)' to parameter of type 'FuncSignature *'
  error: 'warning' diagnostics seen but not expected: 
    File <...>clang/test/SemaObjC/comptypes-legal.m Line 36: incompatible function pointer types sending 'NSObject *(NSObject *, NSObject *)' to parameter of type 'FuncSignature *' (aka 'id (*)(NSObject *, Derived *)')
  2 errors generated.
  
  --
  
  ********************
  
  Testing Time: 438.97s
  ********************
  Failing Tests (8):
      Clang :: Sema/block-return.c
      Clang :: Sema/callingconv-ms_abi.c
      Clang :: Sema/callingconv-sysv_abi.c
      Clang :: Sema/callingconv.c
      Clang :: Sema/overloadable.c
      Clang :: Sema/pass-object-size.c
      Clang :: Sema/preserve-call-conv.c
      Clang :: SemaObjC/comptypes-legal.m




CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D74116/new/

https://reviews.llvm.org/D74116





More information about the cfe-commits mailing list