]> granicus.if.org Git - clang/commit
[Fix] Customize warnings for missing built-in types
authorJohannes Doerfert <jdoerfert@anl.gov>
Wed, 31 Jul 2019 05:16:38 +0000 (05:16 +0000)
committerJohannes Doerfert <jdoerfert@anl.gov>
Wed, 31 Jul 2019 05:16:38 +0000 (05:16 +0000)
commit8396f4d402cfec5cdd671f000e087f42fb5f4fef
treed1cda342f9629ce4720ddbdfd231df1590771bc4
parent5aced54e011ccd1ff756d902c47b898704d8d3a3
[Fix] Customize warnings for missing built-in types

If we detect a built-in declaration for which we cannot derive a type
matching the pattern in the Builtins.def file, we currently emit a
warning that the respective header is needed. However, this is not
necessarily the behavior we want as it has no connection to the location
of the declaration (which can actually be in the header in question).
Instead, this warning is generated
  - if we could not build the type for the pattern on file (for some
    reason). Here we should make the reason explicit. The actual problem
    is otherwise circumvented as the warning is misleading, see [0] for
    an example.
  - if we could not build the type for the pattern because we do not
    have a type on record, possible since D55483, we should not emit any
    warning. See [1] for a legitimate problem.

This patch address both cases. For the "setjmp" family a new warning is
introduced and for built-ins without type on record, so far
"pthread_create", we do not emit the warning anymore.

Also see: PR40692

[0] https://lkml.org/lkml/2019/1/11/718
[1] https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=235583

Differential Revision: https://reviews.llvm.org/D58091

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@367387 91177308-0d34-0410-b5e6-96231b3b80d8
include/clang/Basic/DiagnosticSemaKinds.td
lib/Sema/SemaDecl.cpp
test/Analysis/retain-release.m
test/Sema/builtin-setjmp.c [new file with mode: 0644]
test/Sema/implicit-builtin-decl.c