summaryrefslogtreecommitdiffstats
path: root/test
Commit message (Collapse)AuthorAgeFilesLines
* test: Fix xml output matching on i386-pc-windows-msvc targetsBrad King2015-05-271-0/+2
| | | | | | | | Class methods have an extra attributes="__thiscall__" xml attribute on this architecture that does not appear in our test expectation files. We already have an explicit test that this function type attribute is generated, so simply filter it out from test output before matching.
* Output: Move function type attributes to end of element attribute listBrad King2015-05-271-3/+3
| | | | | | | Function type attributes like attributes="__thiscall__" are specific to the architecture and so may need to be filtered during testing. Move them to be the last xml attribute in their element to make filtering easier.
* Output: Generate throw="..." instead of throws="..."Michka Popoff2015-05-2134-149/+149
| | | | | | Original gccxml output used the singular name, so we should too for compatibility. Fix this typo left from commit defc576826 (Output: Generate Function and related elements, 2014-02-12).
* Output: Place inline namespace members in containing namespaceBrad King2015-05-157-0/+42
| | | | | | | | | | | | | | | | | | An inline namespace affects the linkage of its members but for APIs the members are effectively in the containing namespace. Generate output as if they were really in the containing namespace and do not generate a Namespace element for an inline namespace. If --castxml-start names an inline namespace simply ignore it to avoid dumping a Namespace element for it. One can argue this is valid since the inline namespace should not normally be named in API usage. Set our printing policy to avoid showing the inline namespace component automatically. Note that expressions in the source code that hard-code the inline namespace name will still be preserved and show the inline namespace when printed (e.g. Variable init="" attribute expressions). Suggested-by: Michka Popoff <michkapopoff@gmail.com>
* Output: Do not generate name="" attribute on anonymous namespacesBrad King2015-05-153-0/+14
| | | | Be consistent with gccxml which did not generate the attribute.
* Output: Add mangled="" attributes to function and variable declsBrad King2015-05-1251-95/+96
| | | | | | The gccxml output format includes mangled="" attributes on almost all elements. Clang only defines mangling for function and variable declarations. Add mangled attributes to castxml output where possible.
* Output: Drop unused index previously consumed by CvQualifiedType elementsBrad King2015-04-2815-97/+97
| | | | | | | | Refactoring in the parent commit removed the need to consume a node index when creating a CvQualifiedType element. That commit preserved the behavior artificially in order to minimize differences in expected test output. Now remove this behavior and update the expected test output to account for the now-contiguous indexes.
* Output: Refactor generation of CvQualifiedType elementsBrad King2015-04-2842-78/+131
| | | | | | | | | | | | | | | | | | | | | Previously our handling of cv-qualified types did not account for multiple locally cv-qualified types encountered through multiple levels of desugaring. This could lead to CvQualifiedType elements that reference elements that are generated with a different id. Refactor our internal representation of dump nodes to keep cv-qualifiers in the node ids. Teach AddTypeDumpNode to collect cv-qualifiers from each level of desugaring and compute their union. Once the desugared unqualified type is found, generate one CvQualifiedType element for the qualified type, if any. Update the expected test output to account for the new ordering of nodes. Mark the Class-template-constructor-template test case as no longer broken because this approach fixes it. Add test cases covering cv-qualifiers added at different layers of desugaring (via "T const" where T is already a "const" type in a template instantiation). GitHub-Issue: 10
* test: Add option to transform actual xml to expected xmlBrad King2015-04-281-0/+12
| | | | | | | If TEST_UPDATE is set in the environment and a test fails, transform the actual xml output into the expected xml and overwrite the .xml.txt file containing the latter. This will help make sweeping updates to the expected test output when sweeping output format changes are made.
* Output: Add "size" and "align" attributes on builtin types and structsMichka Popoff2015-04-0871-140/+140
| | | | | | This information is produced by gccxml, so add it to our output too. Since we don't know the architecture that will be targeted during testing, match any size and align values with "[0-9]+".
* Output: Generate an "offset" attribute on Field elementsMichka Popoff2015-04-088-10/+10
| | | | This information is produced by gccxml, so add it to our output too.
* Output: Handle function types with no prototypeBrad King2015-03-313-0/+9
| | | | | | | | | | | A FunctionType may be either FunctionProtoType or FunctionNoProtoType. Check that runtime downcasts to FunctionProtoType succeed before using them. For FunctionNoProtoType we will simply output the type "int()", which is compatible with gccxml format (gccxml never lacked prototypes because it always operates in C++ mode). In CastXML we can encounter functions with no prototype in C++ modes when traversing Clang buildins. GitHub-Issue: 1
* test: Print command line string when a test failsBrad King2015-03-311-0/+2
| | | | This will make it easy to re-run the command by hand for debugging.
* Port to LLVM/Clang SVN r232962 (trunk)Brad King2015-03-232-7/+7
| | | | | | | | Clang renamed clang::DeclContext::{lookup_const_result => lookup_result}. Use "auto" to automatically match either of these. Update test expected output to match the lack of throws="" on destructors in C++98 mode.
* Output: Traverse namespace redeclarationsBrad King2015-03-235-0/+35
| | | | | | | | | | | | | | | A namespace may be redeclared to add more members: namespace ns { void f1(); } namespace ns { void f2(); } Fix our AST traversal to consider members from all redeclarations of each namespace instead of only the canonical (first) one. Previously we generated members from later redeclarations only if they were referenced from other declarations we happened to encounter. Reported-by: Michka Popoff <michkapopoff@gmail.com>
* Detect: Provide __float128 when simulating GNU compilersBrad King2015-02-255-0/+42
| | | | | | | GNU compilers provide a __float128 builtin type on Intel architectures. When simulating such GNU compiler preprocessing, define a __float128 type with the expected size and alignment in case the translation unit references it.
* test: Add infrastructure to run tests against real GNU compilersBrad King2015-02-251-0/+36
| | | | | Find gcc and g++ tools on the local system to use for running tests for simulating real compilers with --castxml-cc-gnu.
* test: Default to requiring empty stdout and stderrBrad King2015-02-2532-31/+2
|
* test: Fix Function-template source to return from startBrad King2015-02-251-1/+1
| | | | | Fix the start() function in test/input/Function-template.cxx to actually return a value from its implementation.
* Detect: Do not use Clang builtin include dir with --castxml-cc-msvcBrad King2015-02-112-2/+2
| | | | | | | | | In commit 8d8aacd6 (Detect: Use Clang builtin include dir even with --castxml-cc-<id>, 2015-02-04) we added the Clang builtin include dir to the beginning of the include path detected by --castxml-cc-msvc. However, since we use only the detected predefined macros and not those builtin to Clang, the Clang builtin headers cannot be included safely. Revert that part of the commit for now.
* Detect: Drop detected predefined macros starting in '__has'Brad King2015-02-046-4/+16
| | | | | These macros are builtin to Clang so we should not try to use any such definitions detected from the compiler.
* Detect: Use Clang builtin include dir even with --castxml-cc-<id>Brad King2015-02-047-4/+7
| | | | | | | | | | | | | | | | | | | | | | | | We need implementation-provided headers to come from Clang to match what is really built in to the parser. When not using --castxml-cc-<id>, the Clang driver adds its builtin include directory in methods like Linux::AddClangSystemIncludeArgs MSVCToolChain::AddClangSystemIncludeArgs CrossWindowsToolChain::AddClangSystemIncludeArgs (see lib/Driver/*ToolChain*.cpp). When using --castxml-cc-<id>, we must add the Clang builtin include dir in the appropriate place. GNU-like compilers should have a builtin include directory too, providing files like <emmintrin.h>. The Clang driver does not add this directory from GCC toolchains and instead adds its own builtin include directory. In this case, replace the detected compiler builtin include directory with ours. MSVC-like compilers have no separate builtin include directory. The Clang driver simply places its own builtin include direcory before the system include directory read from the INCLUDE environment variable. In this case, do the same.
* test: Add a case to test that -c is ignoredGaëtan Lehmann2015-02-033-0/+3
| | | | | | | The '-c' option is required to use castxml with ccache to tell ccache that we are compiling rather than linking. In castxml we already ignore the option when used with --castxml-gccxml, so add a test case to ensure the behavior is preserved in the future.
* castxml: Allow -E to suppress --castxml-gccxml when used togetherGaëtan Lehmann2015-01-286-4/+6
| | | | | | | | | | | This helps make castxml usable with ccache. In its first pass, ccache drops the -o and the output file from the command line and add the -E option to get the preprocessed output. It does not now about --castxml-gccxml, so castxml must not produce an error when the options are used together. Instead make -E suppress --castxml-gccxml, much like compilers do for -E and -c together. Co-Author: Brad King <brad.king@kitware.com>
* castxml: Add creditsBrad King2014-12-171-0/+3
|
* Output: Fix references to cv-qualified types encountered indirectlyBrad King2014-12-114-5/+35
| | | | | | | | | | | | Teach AddDumpNode to optionally report back the actual QualType that it selects after possibly unwrapping some layers of indirection in the Clang AST. Use this in GetTypeIdRef so that we check this actual QualType's cv qualifiers instead of the original QualType. Otherwise we may generate a dangling reference to the id number that is replaced by a CvQualifiedType id. Fix the expected output of existing test cases that exhibit this problem and add a new test case designed to cover the behavior explicitly.
* test: Improve class template member typedef test casesBrad King2014-12-114-6/+6
| | | | Reference the template parameter type as the typedef'd type.
* RunClang: Refactor definition of implicit membersBrad King2014-12-086-7/+30
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Use clang::Sema::PerformPendingInstantiations before we attempt to add implicit member definitions so any real errors show up first. Then set SuppressAllDiagnostics to suppress errors caused by the following. Iterate over all members of one class at a time in order of completion of class definition (bases before derived classes). Force definition of each member using clang::Sema::MarkFunctionReferenced followed by another call to clang::Sema::PerformPendingInstantiations to ensure that members formed by implicitly instantiated templates are completed. Clang will mark any failed declaration as invalid, allowing us to exclude it from the output. This works both for implicit and explicit members. Update the test suite to mark test cases that are no longer 'broken'. According to discussion on the Clang cfe-commits mailing list: [PATCH] Add DiagnosticSuppressionScope RAII class http://thread.gmane.org/gmane.comp.compilers.clang.scm/110832/focus=111112 this approach may depend on non-guaranteed behavior. By iterating over members in order of class definition, we mark any bad special members invalid in base classes so that when Clang processes those in derived classes the invalid members are only one "step" away. Hopefully this behavior will be easier to preserve if Clang changes in the future.
* RunClang: Delay class implicit members until end of parsingBrad King2014-12-081-25/+25
| | | | | | | | | | | | | | Tell Clang to enable incremental processing so that it does not tear down the parser when EOF is reached. In HandleTagDeclDefinition, queue completed classes for later processing instead of adding class implicit members immediately. Then add implicit members at the end and finally call clang::Sema::ActOnEndOfTranslationUnit to tear down the parser when we are done. This approach allows Clang to finish parsing the translation unit without interference from our custom implicit member behavior. Fix the expected output of the Class-bases test in c++11 mode to match the new order of the implicit members.
* Port to LLVM/Clang SVN r219684 (trunk)Brad King2014-10-1429-98/+199
| | | | | | | | | | | | | | Traversal of the clang::driver::JobList entries must now use a range-based for loop. Update expected test output to add throws="" to implicit class members in c++98 mode (which Clang previously missed). First run sed -i 's/artificial="1"/&( throws="")?/' test/expect/*.xml.txt Then split the c++98 and c++11 outputs that have too many throws="" instances for the CMake regex paren limit into separate files. For c++98 we expect throws="" on implicit members. For c++11 we do not.
* Port to LLVM/Clang SVN r216002 (trunk)Brad King2014-08-204-2/+2
| | | | Rename 'c++1y' to 'c++14'.
* test: Add cases for --castxml-cc-(gnu|msvc) detectionBrad King2014-04-1621-0/+68
| | | | | | Create dummy gnu-like and msvc-like compiler binaries. Use them with the --castxml-cc-<id> options to verify that the preprocessor definitions and include directories are detected as expected.
* Output: Add function calling convention attributesBrad King2014-04-143-0/+31
| | | | | Add to Function-like and FunctionType elements an attributes="" attribute for the calling convention as gccxml does.
* Output: Generate location attributes for builtin declarationsBrad King2014-04-113-0/+13
| | | | | | Report a file id "f0" named "<builtin>" for declarations that are generated by the compiler and have no reference location in the source. Add a test case covering the MSVC builtin "size_t" typedef.
* Output: Traverse extern "C" namespace membersBrad King2014-04-113-0/+18
| | | | Teach AddDeclContextMembers to recurse on LinkageSpecDecl members.
* Output: Drop class template partial specializations from outputBrad King2014-04-115-0/+43
| | | | | | | Since gccxml format does not support uninstantiated templates we must not output any partial specializations either. Skip class template partial specializations when traversing context members. Desugar non-dependent typedef members of class template partial specializations.
* Output: Drop functions with rvalue reference types from gccxml outputBrad King2014-04-1111-0/+47
| | | | | | | | | | | Improve support for -std=c++11 with --castxml-gccxml by dropping all functions and class methods whose signature contains a rvalue reference. This subsumes the previous check for implicit move constructors and implicit move assignment operators and extends it to explicitly written declarations too. Add test cases to verify that such declarations are excluded from the output.
* Output: Order queue deterministically by node indexBrad King2014-04-118-8/+8
| | | | | | | | | | Use a set<> instead of a queue<> to represent the output node queue. Order nodes by the dump node index. The index is the same as the order of encounter so for complete nodes this should normally be the same order as before. However, QueueIncompleteDumpNodes previously ordered based on memory position which is not deterministic. Use the node index to get a consistent order across runs. Fix the expected output for test cases that changed the order of incomplete nodes.
* castxml: Register all LLVM target architectures and asm parsersBrad King2014-04-103-0/+15
| | | | | We need as parsers to support Visual Studio system header files that contain inline assembly.
* castxml: Support -std=c++11 with --castxml-gccxmlBrad King2014-04-1010-4/+26
| | | | | | | | | | | | | | | | | | | | | Parsing standard library headers in Visual Studio 11 and above requires Clang to use -std=c++11 because the headers use C++11 constructs. While gccxml output format does not support these constructs, it is still useful to be able to output interfaces from C++98 project code while tolerating C++11 constructs in system headers. Drop the rejection of -std=c++11 and --castxml-gccxml together. Teach our ASTVisitor::AddDumpNode method to skip deleted member functions, implicit move constructors, and implicit move assignment operators. This should avoid encountering any C++11 constructs that are not written explicitly in the translation unit. Extend the test suite to run all gccxml output format tests in both -std=c++98 and -std=c++11 mode to verify the behavior of the two modes is as close as possible. Tweak the Class-implicit-members expected output to tolerate the empty throw specification missing in C++11 mode. Add a RValueReferenceType test to verify that the gccxml-format output contains an Unimplemented element for the rvalue-reference type.
* test: Split gccxml test macros by language and standardBrad King2014-04-091-3/+15
| | | | | Factor out macros to add tests by individual language standard from those that cover a group of language standards.
* test: Name expected results by language standardBrad King2014-04-09126-7/+7
| | | | | | Name files "gccxml.<std>.<test>.(stdout|stderr|result|xml).txt" where "<std>" is either the language standard or "any" if the result works for any standard.
* test: Support zero or many alternative expected result file namesBrad King2014-04-092-7/+10
| | | | | | Teach test/run.cmake to loop over a list of possible expected result names. This will allow tests results to be specialized in certain cases without duplicating common results.
* test: Refactor castxml_test_gccxml_common 'std' argumentBrad King2014-04-091-4/+4
| | | | Pass just the standard name and hard-code '-std=' in the implementation.
* test: Remove xml output files before running castxmlBrad King2014-04-091-0/+4
| | | | | Ensure that test output is produced by castxml and not left from a previous test run.
* test: Show failure when implicit member needs bad template instantiationBrad King2014-04-095-0/+14
| | | | | | | | | | | | | | | | | | | When a function template (or member of a class template) is instantiated by an implicit class member definition, Clang delays the instantiation for later handling by clang::Sema::PerformPendingInstantiations during clang::Sema::ActOnEndOfTranslationUnit. If the instantiation causes errors they are not suppressed because our clang::Sema::SFINAETrap has gone out of scope. Even if we could keep a clang::Sema::SFINAETrap in scope, the clang::Sema::InstantiatingTemplate::Initialize method sets sema.InNonInstantiationSFINAEContext to false and adds an entry to sema.ActiveTemplateInstantiations. This prevents the clang::Sema::EmitCurrentDiagnostic call to isSFINAEContext from returning a valid SFINAE context, so errors are still not suppressed. Add a test case demonstrating this known failure, and mark it as "broken". This will require changes to Clang to fix.
* Output: Skip empty declarations in class or namespace membersBrad King2014-04-013-0/+9
| | | | Clang creates an "EmptyDecl" for a stray semicolon. Ignore it.
* castxml: Report help with '-help' and '--help'Brad King2014-04-015-0/+18
| | | | Also pass the flag through so Clang reports its help too.
* castxml: Use parentheses for '--castxml-cc-<id>' commandsBrad King2014-03-319-0/+20
| | | | | | | | Avoid requiring the option to be last by using the form --castxml-cc-<id> "(" <cc> <cc-opt>... ")" to specify compiler commands with arguments.
* Output: Skip through extern "C" contexts to enclosing namespaceBrad King2014-03-313-0/+11
| | | | | The gccxml output format has no representation for extern "C" declaration contexts, so simply report the enclosing namespace.