]> granicus.if.org Git - clang/commit
Work around an annoying, non-standard optimization in the glibc
authorDouglas Gregor <dgregor@apple.com>
Fri, 12 Feb 2010 07:32:17 +0000 (07:32 +0000)
committerDouglas Gregor <dgregor@apple.com>
Fri, 12 Feb 2010 07:32:17 +0000 (07:32 +0000)
commite13ad837709cd7730e18d8af1cf6b7d35a56d6b7
treeca2e49deee5dc33eb0730ebf041c66f26a96d39b
parent96058953c72355efb266abe8e333db4f5715dbd2
Work around an annoying, non-standard optimization in the glibc
headers, where malloc (and many other libc functions) are declared
with empty throw specifications, e.g.,

  extern void *malloc (__SIZE_TYPE__ __size) throw () __attribute__
  ((__malloc__)) ;

The C++ standard doesn't seem to allow this, and redeclaring malloc as
the standard permits (as follows) resulted in Clang (rightfully!)
complaining about mis-matched exception specifications.

  void *malloc(size_t size);

We work around this by silently propagating an empty throw
specification "throw()" from a function with C linkage declared in a
system header to a redeclaration that has no throw specifier.

Ick.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@95969 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Sema/Sema.h
lib/Sema/SemaDeclCXX.cpp
lib/Sema/SemaExceptionSpec.cpp
test/SemaCXX/Inputs/lit.local.cfg [new file with mode: 0644]
test/SemaCXX/Inputs/malloc.h [new file with mode: 0644]
test/SemaCXX/builtin-exception-spec.cpp [new file with mode: 0644]