llvm-project/clang/test/Misc
Reid Kleckner 078aea9043 Store decls in prototypes on the declarator instead of in the AST
This saves two pointers from FunctionDecl that were being used for some
rare and questionable C-only functionality.  The DeclsInPrototypeScope
ArrayRef was added in r151712 in order to parse this kind of C code:

    enum e {x, y};
    int f(enum {y, x} n) {
     return x; // should return 1, not 0
    }

The challenge is that we parse 'int f(enum {y, x} n)' it its own
function prototype scope that gets popped before we build the
FunctionDecl for 'f'. The original change was doing two questionable
things:

1. Saving all tag decls introduced in prototype scope on a TU-global
Sema variable. This is problematic when you have cases like this, where
'x' and 'y' shouldn't be visible in 'f':
    void f(void (*fp)(enum { x, y } e)) { /* no x */ }
This patch fixes that, so now 'f' can't see 'x', which is consistent
with GCC.

2. Storing the decls in FunctionDecl in ActOnFunctionDeclarator so that
they could be used in ActOnStartOfFunctionDef. This is just an
inefficient way to move information around. The AST lives forever, but
the list of non-parameter decls in prototype scope is short lived.

Moving these things to the Declarator solves both of these issues.

Reviewers: rsmith

Subscribers: jmolloy, cfe-commits

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

llvm-svn: 289225
2016-12-09 17:14:05 +00:00
..
Inputs
amdgcn.languageOptsOpenCL.cl [OpenCL] AMDGPU: add support of cl_khr_subgroups 2016-08-17 20:39:49 +00:00
ast-dump-arm-attr.c Prune CRLF. 2014-10-27 12:37:26 +00:00
ast-dump-attr.cpp Do not crash when dumping the objc_bridge_related attribute when its optional arguments are not supplied. 2015-11-30 15:25:34 +00:00
ast-dump-color.cpp Indicate in AST dump whether special member functions are defaulted and trivial. 2016-11-21 23:43:54 +00:00
ast-dump-comment.cpp
ast-dump-decl.c Store decls in prototypes on the declarator instead of in the AST 2016-12-09 17:14:05 +00:00
ast-dump-decl.cpp [Sema] Set range end of constructors and destructors in template instantiations 2016-11-28 11:11:34 +00:00
ast-dump-decl.m
ast-dump-decl.mm Fix a crash in the AST dumper. 2016-06-09 22:03:04 +00:00
ast-dump-invalid.cpp P0305R0: Semantic analysis and code generation for C++17 init-statement for 'if' and 'switch': 2016-07-14 00:11:03 +00:00
ast-dump-lookups.cpp Improve AST dumping: 2016-01-12 21:59:26 +00:00
ast-dump-msp430-attr.c Prune CRLF. 2014-10-27 12:37:26 +00:00
ast-dump-pipe.cl [OpenCL] Introduce ReadPipeType and WritePipeType. 2016-11-18 14:10:54 +00:00
ast-dump-stmt.c
ast-dump-stmt.cpp [AST] Dump dependent scope member expression with its member name 2016-11-09 14:02:18 +00:00
ast-dump-stmt.m
ast-dump-templates.cpp Make output of -ast-print a valid C++ code. 2016-11-10 08:49:37 +00:00
ast-dump-wchar.cpp [ASTDumper] Add some more character escapes for convenience. 2016-11-24 09:41:33 +00:00
ast-print-char-literal.cpp Fix the ASTPrinter output for ascii char literals >127. 2016-02-13 02:31:28 +00:00
ast-print-objectivec.m [tablegen] Check that an optional IdentifierArgument of an attribute is 2016-09-10 03:29:43 +00:00
ast-print-pragmas-xfail.cpp Adds a Pragma spelling for attributes to tablegen and makes use of it for loop 2014-06-13 17:57:25 +00:00
ast-print-pragmas.cpp Add loop pragma for Loop Distribution 2016-06-14 12:04:26 +00:00
attr-source-range.cpp Prune CRLF. 2014-10-27 12:37:26 +00:00
backend-optimization-failure-nodbg.cpp Attempt to pacify buildbots after r280217 2016-08-31 11:01:41 +00:00
backend-optimization-failure.cpp Attempt to pacify buildbots after r280217 2016-08-31 11:01:41 +00:00
backend-resource-limit-diagnostics.cl Update for DiagnosticInfoStackSize changes 2016-06-20 18:13:09 +00:00
backend-stack-frame-diagnostics-fallback.cpp Implement -Wframe-larger-than backend diagnostic 2014-06-05 22:10:59 +00:00
backend-stack-frame-diagnostics.cpp [test] Remove implicit deps on libLTO.dylib on Darwin (NFC) 2016-11-10 22:31:06 +00:00
caret-diags-macros.c [diagnostics] Avoid crashes while printing macro backtraces 2015-12-08 01:08:09 +00:00
caret-diags-scratch-buffer.c
cc1as-asm.s Revert "[Driver] Quote clang full version in dwarf producer when invoking cc1as" 2016-05-02 20:20:49 +00:00
dev-fd-fs.c
diag-aka-types.cpp PR10405 - Desugar FunctionType and TemplateSpecializationType if any type that appears inside needs to be desugared. 2015-07-16 01:06:17 +00:00
diag-format.c Get default -fms-compatibility-version from cl.exe's version 2016-05-13 23:20:11 +00:00
diag-line-wrapping.cpp
diag-macro-backtrace.c
diag-macro-backtrace2.c Improve the printing of ranges when macros are involved. 2015-09-24 01:21:01 +00:00
diag-mapping.c
diag-mapping2.c Improve specificity in the diag-mapping2.c test 2014-06-10 06:08:41 +00:00
diag-null-bytes-in-line.cpp Don't crash w/ a diagnostic range containing a null byte 2016-02-17 22:37:45 +00:00
diag-presumed.c Stop printing macro backtraces that don't help diagnostics. 2015-08-12 18:24:59 +00:00
diag-special-chars.c Attempt to fix test from r225423 to get build bots green. 2015-01-08 02:40:08 +00:00
diag-template-diffing-color.cpp Template Type Diffing change 2016-02-02 00:36:59 +00:00
diag-template-diffing-cxx98.cpp Template Type Diffing change 2016-02-02 00:36:59 +00:00
diag-template-diffing.cpp PR30831: Teach template type diffing to cope with TemplateSpecializationTypes 2016-10-28 19:54:43 +00:00
diag-trailing-null-bytes.cpp
diag-verify.cpp
diagnostic-crash.cpp
driver-verify.c
emit-html-insert.c Revert "clang/test/Driver/crash-report.c: This requires rewriter for -frewrite-includes. [PR20321]" 2014-07-16 15:12:48 +00:00
emit-html.c Revert "clang/test/Driver/crash-report.c: This requires rewriter for -frewrite-includes. [PR20321]" 2014-07-16 15:12:48 +00:00
error-limit-multiple-notes.cpp When sorting overload candidates, sort arity mismatches in ascending 2014-05-01 21:15:24 +00:00
error-limit.c
freebsd-arm-size_t.c
include-stack-for-note-flag.cpp
integer-literal-printing.cpp
interpreter.c Reenable Misc/interpreter.c as r239388 correctly handles such targets 2015-06-09 06:33:13 +00:00
languageOptsOpenCL.cl [OpenCL] Add supported OpenCL extensions to target info. 2016-05-16 17:06:34 +00:00
macro-backtrace.c
message-length.c
nvptx.languageOptsOpenCL.cl NVPTX: Add supported CL features 2016-06-17 19:02:14 +00:00
permissions.cpp Erase REQUIRES: shell-preserves-root from remaining tests, see r242312.þ 2015-07-15 20:04:18 +00:00
predefines.c
r600.languageOptsOpenCL.cl AMDGPU: Fix supported CL features 2016-06-17 02:25:03 +00:00
reduced-diags-macros-backtrace.cpp Stop printing macro backtraces that don't help diagnostics. 2015-08-12 18:24:59 +00:00
reduced-diags-macros.cpp Improve the printing of ranges when macros are involved. 2015-09-24 01:21:01 +00:00
remap-file.c
serialized-diags-driver.c [MSVC Compat] Only warn for unknown clang-cl arguments 2016-01-25 21:14:52 +00:00
serialized-diags-frontend.c
serialized-diags-no-category.c
serialized-diags-no-issue.c
serialized-diags-really-long-text.cpp [Frontend] Fix crash when serializing diagnostics with really long text. 2015-08-06 18:46:36 +00:00
serialized-diags-single-issue.c
serialized-diags-stable.c
serialized-diags.c Improve the printing of ranges when macros are involved. 2015-09-24 01:21:01 +00:00
serialized-diags.h
serialized-diags.m Correctly handle reading locations from serialized diagnostics 2014-10-10 22:20:26 +00:00
show-diag-options.c
tabstop.c
target-parser.c Misc: add a test for TargetParser usage 2016-03-05 21:12:33 +00:00
thinlto.c Make thinlto clang test more robust against LLVM changes. 2016-04-24 03:44:55 +00:00
unnecessary-elipses.cpp
unprintable.c
verify.c
warn-in-system-header.c
warn-in-system-header.h
warn-sysheader.cpp Split out header integration tests 2014-05-04 13:00:32 +00:00
warning-flags-enabled.c Use %select to merge similar diagnostics. NFC 2015-11-14 02:09:55 +00:00
warning-flags-tree.c
warning-flags.c Driver: Remove support for -fobjc-gc* 2016-12-07 00:31:10 +00:00
win32-macho.c Remove dev/null redirect and x86 backend requirement from new test. 2014-06-11 20:19:07 +00:00
working-directory.c
wrong-encoding.c
wrong-encoding2.c