]> granicus.if.org Git - clang/commit
Adopt a more principled approach to invalid declarations:
authorDouglas Gregor <dgregor@apple.com>
Mon, 16 Feb 2009 17:45:42 +0000 (17:45 +0000)
committerDouglas Gregor <dgregor@apple.com>
Mon, 16 Feb 2009 17:45:42 +0000 (17:45 +0000)
commitcda9c674998aedeb9319e95a0284f4d266dcef32
tree6d0dd6d6b0ed35c63e128a7525e399671d283610
parentf06e9c54cb0ab54a4bbf5d92a29fac57b70cdfb9
Adopt a more principled approach to invalid declarations:
  - If a declaration is an invalid redeclaration of an existing name,
    complain about the invalid redeclaration then avoid adding it to
    the AST (we can still parse the definition or initializer, if any).
  - If the declaration is invalid but there is no prior declaration
    with that name, introduce the invalid declaration into the AST
    (for later error recovery).
  - If the declaration is an invalid redeclaration of a builtin that
    starts with __builtin_, we produce an error and drop the
    redeclaration. If it is an invalid redeclaration of a library
    builtin (e.g., malloc, printf), warn (don't error!) and drop the
    redeclaration.

If a user attempts to define a builtin, produce an error and (if it's
a library builtin like malloc) suggest -ffreestanding.

This addresses <rdar://problem/6097585> and PR2892. However, PR3588 is
still going to cause some problems when builtins are redeclared
without a prototype.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@64639 91177308-0d34-0410-b5e6-96231b3b80d8
include/clang/AST/Builtins.def
include/clang/Basic/DiagnosticSemaKinds.def
lib/Sema/Sema.h
lib/Sema/SemaDecl.cpp
lib/Sema/SemaDeclCXX.cpp
test/Sema/implicit-builtin-decl.c
test/Sema/predefined-function.c
test/Sema/tentative-decls.c
test/Sema/typedef-redef.c
test/SemaObjC/class-def-test-1.m