Avoid using NoThrow Exception Specifier in non-C++ Modes.
authorErich Keane <erich.keane@intel.com>
Wed, 5 Jun 2019 14:10:39 +0000 (14:10 +0000)
committerErich Keane <erich.keane@intel.com>
Wed, 5 Jun 2019 14:10:39 +0000 (14:10 +0000)
commitda59652c1ba15ee780cf38186933dcd135e36ed4
tree96c29e065fce6c777dc8d77f7910efeadc743b19
parent253086230fa5d577674b4607b68714cd18cb5d99
Avoid using NoThrow Exception Specifier in non-C++ Modes.

As reported in https://bugs.llvm.org/show_bug.cgi?id=42113, there are a
number of locations in Clang where it is assumed that exception
specifications are only valid in C++ mode. Since the original
justification for the NoThrow Exception Specifier Type was C++ related,
this patch just makes C mode use the attribute-based nothrow handling.

Additionally, I noticed that the handling of non-prototype functions
regressed the behavior of the nothrow attribute, in part because it is
was listed in the function type macro(which I did in the previous
patch).  In reality, it should only be doing so in a conditional nature,
so this patch removes it there and puts it directly in the switch to be
handled correctly.

llvm-svn: 362607
clang/include/clang/Sema/ParsedAttr.h
clang/lib/Sema/SemaType.cpp
clang/test/Sema/attr-nothrow.c [new file with mode: 0644]