Commit Graph

5594 Commits

Author SHA1 Message Date
Mike Stump fc17674d6b The eventual name of this will be clang, might as well start now.
llvm-svn: 67241
2009-03-18 21:19:11 +00:00
Daniel Dunbar 68b01a03ba Driver: Support ToolChain specific path lists to search for files and
programs.

llvm-svn: 67229
2009-03-18 20:26:19 +00:00
Mike Stump 25d1dc2a20 Move generated file to ObjDir.
llvm-svn: 67225
2009-03-18 20:12:50 +00:00
Daniel Dunbar e627c1cc0f Driver: Construct temporary file names.
- This is still suboptimal, but should at least be workable.

llvm-svn: 67223
2009-03-18 19:34:39 +00:00
Mike Stump 1dca7c0061 Add revision information.
llvm-svn: 67220
2009-03-18 18:45:55 +00:00
Daniel Dunbar d175d9753b Driver: Don't warn about unused arguments if there are Driver errors
(brings code in line with diagnostic.

llvm-svn: 67217
2009-03-18 18:03:46 +00:00
Mike Stump 3b79d59be7 Fix URL trimming for version information.
llvm-svn: 67206
2009-03-18 15:19:35 +00:00
Mike Stump 02537142c1 Improve version number.
llvm-svn: 67204
2009-03-18 14:00:02 +00:00
Daniel Dunbar a2aedc6943 Driver: Port Clang argument translation.
llvm-svn: 67193
2009-03-18 10:01:51 +00:00
Daniel Dunbar e6c8319943 Driver: Bug fix, derived .gch names sometimes started with "/".
llvm-svn: 67192
2009-03-18 09:58:30 +00:00
Daniel Dunbar 7591f29f7c Driver: Add argument translation utilities to ArgList.
- Support things like telling which -ffoo -fno-foo option won, and
   forwarding all arguments matching a certain set of options to the
   tool.

llvm-svn: 67189
2009-03-18 09:29:36 +00:00
Daniel Dunbar a3246a0638 Driver: Lift out common GCC tool and implement generic GCC tool
argument translation.

Also, stub out clang tool implementation a bit more.

llvm-svn: 67185
2009-03-18 08:07:30 +00:00
Daniel Dunbar dcd05482bd Driver: Add assert and FIXME; arguments which act as linker inputs
(e.g., -filelist) are currently broken.

llvm-svn: 67183
2009-03-18 08:02:40 +00:00
Daniel Dunbar 8eba365d36 Driver: Provide Arg::render implementations.
llvm-svn: 67182
2009-03-18 08:01:48 +00:00
Daniel Dunbar 4b6058e33a Driver: Add "d" flag to Options.def for options which are completely
handled by driver. 
 - This is not very precise, we use it to drive the "forward-to-gcc"
   predicate, when trying to talk to a generic gcc tool.

 - Slightly better than what ccc was doing, and should be good
   enough. Platforms which want a robust driver should implement a
   proper tool chain.

llvm-svn: 67181
2009-03-18 08:01:15 +00:00
Daniel Dunbar 04c4c2c3db Driver: ConstructJob also needs to know the destination (where to put
its commands).

llvm-svn: 67179
2009-03-18 07:06:02 +00:00
Daniel Dunbar 3beceaf7f1 Driver: Print version on stderr to match [gc]cc.
llvm-svn: 67178
2009-03-18 06:51:03 +00:00
Daniel Dunbar 0928b3125c Driver: Implement -### (hard to tell, since we don't actually
construct any jobs).

llvm-svn: 67177
2009-03-18 06:49:39 +00:00
Daniel Dunbar 2b4bda8073 Driver: Claim inputs when we bind the InputAction.
llvm-svn: 67174
2009-03-18 06:21:12 +00:00
Daniel Dunbar e4197f6203 Driver: Rename Command::Argv to Command::Arguments to make it clearer
that this does not include the implicit first argument (the executable
name).

llvm-svn: 67172
2009-03-18 06:13:37 +00:00
Daniel Dunbar bcd775b436 Driver: Don't claim inputs when pipelining, a tool should eventually
claim these.

llvm-svn: 67171
2009-03-18 06:09:38 +00:00
Daniel Dunbar 0450e6dc4c Driver: Add a dash of const.
llvm-svn: 67170
2009-03-18 06:07:59 +00:00
Daniel Dunbar 1a093d2049 Driver: Stub out Tool::ConstructJob.
llvm-svn: 67169
2009-03-18 06:00:36 +00:00
Daniel Dunbar aabaac4743 Driver: Fix Compilation::getArgsForToolChain, local variable was
shadowing member.

llvm-svn: 67167
2009-03-18 05:58:45 +00:00
Daniel Dunbar 1197adcbf1 Driver: Add two normalizations for powerpc.
- PR3830

llvm-svn: 67166
2009-03-18 04:41:46 +00:00
Daniel Dunbar eb843bedf9 Driver: Ditch Driver::DefaultToolChain, this can vary between compilations.
llvm-svn: 67162
2009-03-18 03:13:20 +00:00
Daniel Dunbar 896cb66166 Driver: I was too hasty in free'ing Actions, we sometimes share
Actions so a simple tree traversal isn't quite good enough. Leaving a
FIXME for now.

llvm-svn: 67161
2009-03-18 03:02:22 +00:00
Daniel Dunbar 06d918c2f4 Driver: Initialize Arg::Claimed
llvm-svn: 67160
2009-03-18 02:57:50 +00:00
Daniel Dunbar f0eddb8510 Driver: Move actions into Compilation, and construct the compilation
earlier.

 - This gives us a simple ownership model, and allows clients access
   to more information should they ever want it.

 - We now free Actions correctly.

llvm-svn: 67158
2009-03-18 02:55:38 +00:00
Daniel Dunbar d00978bc0d Driver: Add test for binding of precompile; exposed bug due to my
flawed idea that llvm::sys::Path::getBasename was a version of
basename().

llvm-svn: 67153
2009-03-18 02:00:31 +00:00
Daniel Dunbar 338d74898c Driver: Implement JoinedAndSeparateArg::getValue and add parsing test
case.

llvm-svn: 67151
2009-03-18 01:48:37 +00:00
Daniel Dunbar 6965c2b113 Driver: UnknownHostInfo was always returning 0.
llvm-svn: 67150
2009-03-18 01:39:08 +00:00
Daniel Dunbar 2608c548b5 Driver: Use PrettyStackTrace.
llvm-svn: 67149
2009-03-18 01:38:48 +00:00
Daniel Dunbar 0160172228 Driver: Release Host, ToolChain, and Tool implementations.
llvm-svn: 67146
2009-03-18 01:09:40 +00:00
Daniel Dunbar 389fe1f563 Driver: Add test case for -ccc-clang-archs (which, it turns out, was
inverted).

llvm-svn: 67135
2009-03-18 00:12:31 +00:00
Daniel Dunbar b39cc52eda Driver: Add -ccc-print-bindings option (for testing); the Python
driver has no corresponding option.

llvm-svn: 67125
2009-03-17 22:47:06 +00:00
Daniel Dunbar 82116f8df4 Driver: Add name to Tool (for testing/debugging) and move GCC_* tools
into gcc:: namespace.

llvm-svn: 67120
2009-03-17 22:45:24 +00:00
Chris Lattner f568f8c889 GCC 4.0 isn't happy with VISIBILITY_HIDDEN on a namespace.
llvm-svn: 67112
2009-03-17 22:24:01 +00:00
Daniel Dunbar 15abb2ee0e Driver: GCC 4.0 isn't happy with VISIBILITY_HIDDEN on a namespace.
llvm-svn: 67110
2009-03-17 22:18:43 +00:00
Daniel Dunbar 5903d8c08a Driver: Stub out generic GCC tool selection (missed a file)
llvm-svn: 67109
2009-03-17 22:07:58 +00:00
Daniel Dunbar 04cb029e0b Driver: Stub out generic GCC tool selection.
llvm-svn: 67108
2009-03-17 22:07:31 +00:00
Daniel Dunbar 0a248bb5c2 Driver: Stub out generic GCC tool chain implementation.
llvm-svn: 67107
2009-03-17 21:38:00 +00:00
Daniel Dunbar 71bdee6ea1 Driver: Make sure to get the default arch name from the tool chain, not the
host; the toolchain may differ based on command line arguments.

llvm-svn: 67106
2009-03-17 21:29:52 +00:00
Daniel Dunbar 7a70c5ddbf Driver: Pass HostInfo reference into ToolChain.
llvm-svn: 67105
2009-03-17 21:21:26 +00:00
Daniel Dunbar 52e0c70868 Driver: Pass Driver reference down into Host info, which will need it
to pass to ToolChains, which may need Driver specific information (for
example, to form search paths).

llvm-svn: 67102
2009-03-17 20:45:45 +00:00
Daniel Dunbar 62ca7d23ce Driver: Fix typo ArgList destructor.
llvm-svn: 67101
2009-03-17 20:44:29 +00:00
Daniel Dunbar b42a26c0a5 Driver: Hide HostInfo implementations.
- Also, normalize arch names a tad and stub out getToolChain
   implementations.

llvm-svn: 67091
2009-03-17 19:00:50 +00:00
Daniel Dunbar c1b70b2039 Driver: Add two option form of ArgList::getLastArg.
llvm-svn: 67090
2009-03-17 18:51:42 +00:00
Daniel Dunbar 7a178a40a1 Driver: Add logic for computing where to put job outputs (pipe,
temporary file, user provided name, derived name).

llvm-svn: 67088
2009-03-17 17:53:55 +00:00
Daniel Dunbar 527e2b3f8c Add ArgList::MakeArgString and make ArgList::Make* const.
- Slightly strange, but the idea is that the ArgList data structure
   is primarily a list of arguments; we want to allow clients to still
   add argument strings to an ArgList to avoid worrying about string
   lifetimes (or unnecessary string copying).

llvm-svn: 67086
2009-03-17 17:51:18 +00:00
Daniel Dunbar 6865a9e975 Fix unused variable warning in -Asserts mode.
llvm-svn: 67073
2009-03-17 04:12:06 +00:00
Douglas Gregor 23d75bb326 Build system changes to use TableGen to generate the various
diagnostics. This builds on the patch that Sebastian committed and
then revert. Major differences are:

  - We don't remove or use the current ".def" files. Instead, for now,
    we just make sure that we're building the ".inc" files.
  - Fixed CMake makefiles to run TableGen and build the ".inc" files
    when needed. Tested with both the Xcode and Makefile generators
    provided by CMake, so it should be solid.
  - Fixed normal makefiles to handle out-of-source builds that involve
    the ".inc" files.

I'll send a separate patch to the list with Sebastian's changes that
eliminate the use of the .def files.

llvm-svn: 67058
2009-03-16 23:06:59 +00:00
Daniel Dunbar e75d834c7c Driver: Implement majority tool binding logic.
- Still need code for determining proper output location.

 - Doesn't work yet, of course, as the host isn't providing real
   tool chains.

 - Interface still has a few warts, but has gotten a nice bit of
   polish during the rewrite.

llvm-svn: 67038
2009-03-16 06:56:51 +00:00
Daniel Dunbar 3ce436d229 Driver: Migrate some data into the Compilation; after pipelining
access to most data should go through the current Compilation, not the
Driver (which shouldn't be specialized on variables for a single
compilation).

llvm-svn: 67037
2009-03-16 06:42:30 +00:00
Daniel Dunbar 9e2136d930 Driver: Sketch Tool and ToolChain classes.
llvm-svn: 67036
2009-03-16 05:25:36 +00:00
Daniel Dunbar 02ae54c549 Driver: claim input arguments when building phases.
llvm-svn: 67016
2009-03-15 01:40:22 +00:00
Daniel Dunbar adc91e6597 Driver: Start warning about unused arguments.
- This has a number of current flaws, enabling now to flush out
   problems while bringing up other parts.

llvm-svn: 67015
2009-03-15 01:38:15 +00:00
Daniel Dunbar ae0e55eb7f Driver: Update ArgList::{hasArg,getLastArg} to optionally claim the
arguments if they exist.

llvm-svn: 67014
2009-03-15 00:48:16 +00:00
Daniel Dunbar 1bb3b2ccf3 Driver: Add types::{isAcceptedByClang,isCXX} predicates.
llvm-svn: 66986
2009-03-13 23:46:19 +00:00
Daniel Dunbar 313c291269 Driver: Add simple Job classes, simple wrappers for information about
what processes to execute during a compilation.

llvm-svn: 66985
2009-03-13 23:36:33 +00:00
Daniel Dunbar 438ff8dbe7 Driver: Action vtables were still hungry.
llvm-svn: 66980
2009-03-13 23:17:57 +00:00
Daniel Dunbar 3f261ff66b Driver: Provide food and shelter for Action vtables.
llvm-svn: 66978
2009-03-13 23:08:03 +00:00
Daniel Dunbar 95e6b191cb Driver: Sprinkle some consts in, stub out BuildJobs method.
llvm-svn: 66968
2009-03-13 22:12:33 +00:00
Daniel Dunbar e5dc48233f Driver: For universal builds, handle archs in the order they were seen.
llvm-svn: 66939
2009-03-13 20:33:35 +00:00
Daniel Dunbar c5a5ac5015 Driver: Fix '-x none' handling.
- Enough stuff works now we can test argument parsing & pipelining.

llvm-svn: 66913
2009-03-13 17:57:10 +00:00
Daniel Dunbar 7326ad57a4 ccc/Driver: Normalize phase spelling in -ccc-print-phases.
llvm-svn: 66912
2009-03-13 17:52:07 +00:00
Daniel Dunbar e2ca3bddde Driver: Some minor bug fixes.
- language recognition was recognizing prefixes incorrectly.
 - -x none wasn't working.
 - test for "can lipo" was backwords.
 - missed a '"' in -ccc-print-phases

llvm-svn: 66911
2009-03-13 17:46:02 +00:00
Daniel Dunbar dfab7abdea Driver: Fix think in ArgList::MakeIndex.
llvm-svn: 66908
2009-03-13 17:25:24 +00:00
Daniel Dunbar 3efedddcf9 Driver: Return 0 from BuildCompilation on -ccc-print-phases,
-ccc-print-options.

llvm-svn: 66907
2009-03-13 17:24:34 +00:00
Daniel Dunbar ed50f6c356 Driver: Print -ccc-print-phases on stderr.
llvm-svn: 66906
2009-03-13 17:20:20 +00:00
Daniel Dunbar 0a180f1499 Driver: Fix thinko in Darwin host identification.
llvm-svn: 66889
2009-03-13 12:23:29 +00:00
Daniel Dunbar aaf1ea6386 Driver: Support -ccc-print-phases.
llvm-svn: 66888
2009-03-13 12:19:02 +00:00
Daniel Dunbar 80665fb0c5 Driver: Add cast<> support for Action, and some other accessors.
llvm-svn: 66887
2009-03-13 12:17:08 +00:00
Daniel Dunbar 6522933d7a Driver: Complete "pipelining" (building the list of abstract actions
to perform). Still doesn't do anything interesting.
 - This code came out much cleaner than in ccc with the reworked
   phases & mapping of types to lists of compilation steps (phases) to
   perform.

llvm-svn: 66885
2009-03-13 11:38:42 +00:00
Gabor Greif aa033f9570 support cmake
llvm-svn: 66884
2009-03-13 11:37:39 +00:00
Daniel Dunbar 286c39a993 Driver: Make phase names nouns not verbs.
llvm-svn: 66883
2009-03-13 11:36:01 +00:00
Daniel Dunbar e71b9640ad Driver: Add types::getNumCompilationPhases, getCompilationPhase to
provide information about what steps should be done for a particular
file type.

llvm-svn: 66881
2009-03-13 11:28:30 +00:00
Daniel Dunbar 58cac7ca68 Driver: Pull Phase info into separate file.
llvm-svn: 66880
2009-03-13 11:27:05 +00:00
Daniel Dunbar 0f35a026a9 Driver: Ignore empty arguments.
llvm-svn: 66858
2009-03-13 01:01:44 +00:00
Daniel Dunbar 5e0f6af190 Driver: Handle "immediate" options.
Also, add some FIXMEs, improve doxygen & comments.

llvm-svn: 66857
2009-03-13 00:51:18 +00:00
Daniel Dunbar 34c4187152 ccc/Driver: Mark {dump{machine,specs,version},
print-{multi-{directory,lib,os-directory}, search-dirs} as unsupported
instead of handling separately.

llvm-svn: 66848
2009-03-13 00:17:48 +00:00
Daniel Dunbar bfeec7443f Driver: Determine which compilation stages to run.
llvm-svn: 66844
2009-03-12 23:55:14 +00:00
Daniel Dunbar 92c2af76c4 Driver: Value initialization is nicer than memset.
- Who wouldn't want correctness to hang critically on two easily
   ignored characters?

Thanks Doug!

llvm-svn: 66819
2009-03-12 18:42:02 +00:00
Daniel Dunbar f479c1293e Driver: Add majority of driver-driver implementation.
- Compare to driverdriver.c if bored; not completely fair since the
   driver gets a bit more code in other places to handle binding archs
   (for Xarch) but not completely unfair either.

Fear not, extra Action classes will have a happy home for their
vtables soon.

llvm-svn: 66817
2009-03-12 18:40:18 +00:00
Daniel Dunbar 57fc0194a8 Driver: Drop some unnecessary uses of clang namespace.
llvm-svn: 66813
2009-03-12 18:31:08 +00:00
Daniel Dunbar 446f684332 Driver: Introduce ActionList typedef, tweak some constness.
llvm-svn: 66809
2009-03-12 18:24:49 +00:00
Daniel Dunbar 208f0269e7 Driver: Add types::canLipoType helper method.
llvm-svn: 66807
2009-03-12 18:21:41 +00:00
Daniel Dunbar 7c8d653a2c Driver: Add ArgList support for synthesizing arguments.
llvm-svn: 66805
2009-03-12 18:20:18 +00:00
Daniel Dunbar 7586bb9de8 Driver: Add ArgList::getLastArg.
llvm-svn: 66794
2009-03-12 16:03:38 +00:00
Daniel Dunbar 5cd1e419b7 Driver: Tweak diag names to be more consistent.
llvm-svn: 66787
2009-03-12 09:13:48 +00:00
Daniel Dunbar c0b3e95a1a Driver: Use standard Diagnostic interface for diagnostics.
llvm-svn: 66786
2009-03-12 08:55:43 +00:00
Daniel Dunbar 33699689ed Driver: Fix thinko in Arg::hasArg.
llvm-svn: 66785
2009-03-12 08:45:11 +00:00
Daniel Dunbar d971762d5a Driver: '-' is parsed as an input.
llvm-svn: 66784
2009-03-12 08:44:47 +00:00
Daniel Dunbar 1688f1a7e0 Driver: Start sketching construction of abstract built actions.
llvm-svn: 66783
2009-03-12 07:58:46 +00:00
Daniel Dunbar 1a8738935c Driver: Add information on Driver input/temporary types.
llvm-svn: 66781
2009-03-12 07:40:41 +00:00
Daniel Dunbar 6d3d46bbeb Driver: Add Option flags.
llvm-svn: 66774
2009-03-12 05:46:32 +00:00
Daniel Dunbar c727e9310d Driver: Tweak option naming/def:
- Use OPT_ prefix for ids.

 - Reference groups and aliases by shortend id (on the theory that
   this is more readable).

 - Rename the special option ids to more protected names.

llvm-svn: 66767
2009-03-12 03:42:54 +00:00
Daniel Dunbar 71dc375142 Driver: Reorder arguments in Options.def so option name is first.
llvm-svn: 66759
2009-03-12 01:46:53 +00:00
Daniel Dunbar 2c3939cb5d Driver: Add ArgList::hasArg, for testing for the presence of an
argument matching some Option::ID.

llvm-svn: 66758
2009-03-12 01:36:44 +00:00
Daniel Dunbar 8fa943436b Driver: Add Option::getId and Option::matches taking an option
identifier; we will want to use the latter in situations where we just
want to check for a match, but not load options unnecessarily.

llvm-svn: 66757
2009-03-12 01:34:20 +00:00
Daniel Dunbar 4cb4e1d72b Driver: Add host info (add new files).
llvm-svn: 66603
2009-03-10 23:50:49 +00:00
Daniel Dunbar 4dff6a4973 Driver: Add host info.
- Replace assorted -ccc-host-* options by -ccc-host-triple which is
   more sane.

llvm-svn: 66600
2009-03-10 23:41:59 +00:00
Daniel Dunbar ee66cf2249 Driver: Handle magic -ccc- options.
- Follows ccc currently, but this functionality should eventually be
   outside the Driver lib.

llvm-svn: 66575
2009-03-10 20:52:46 +00:00
Daniel Dunbar 4095d89532 Remove some now-unneeded calls to llvm::errs().flush().
llvm-svn: 66555
2009-03-10 18:00:19 +00:00
Mike Stump 82d8d559bb Fix warnings in build on clang-x86_64-freebsd buildbot.
llvm-svn: 66344
2009-03-07 18:35:41 +00:00
Daniel Dunbar d02cb1dc2b Driver: Basic argument parsing.
- Add Driver::ParseArgStrings.
 - Store values directly in CommaJoinedArg to support simple access.
 - Add FlagArg class.

llvm-svn: 66142
2009-03-05 06:38:47 +00:00
Daniel Dunbar 458b6982d4 Driver: Implement Option::accept methods.
llvm-svn: 66106
2009-03-04 23:22:02 +00:00
Daniel Dunbar b7396f10b9 Driver: Fix off by one in ParseOneArg; this code is ugly but will be
replaced anyway.

llvm-svn: 66101
2009-03-04 23:03:35 +00:00
Daniel Dunbar 135837e046 Driver: Add Arg::dump and SeparateArg stubs.
llvm-svn: 66100
2009-03-04 23:02:50 +00:00
Daniel Dunbar d9621da5ae Driver: Add OptTable::ParseOneArg.
llvm-svn: 66090
2009-03-04 22:41:37 +00:00
Daniel Dunbar 16b9fd447a Driver: Add ArgList::{append, getArgString}
llvm-svn: 66089
2009-03-04 22:40:08 +00:00
Daniel Dunbar 9333fc656d Driver: Stub out Arg implementations.
llvm-svn: 66088
2009-03-04 22:37:52 +00:00
Daniel Dunbar a59194cd10 Driver: Option's need to know their ID.
- Also, add Input and Unknown opts to OptTable.

llvm-svn: 66079
2009-03-04 21:53:04 +00:00
Daniel Dunbar f49bc318ed Driver: Add Option flags.
llvm-svn: 66067
2009-03-04 21:05:23 +00:00
Daniel Dunbar 53bbc31ebd Driver: Tweak Option::accept interface.
llvm-svn: 66066
2009-03-04 20:53:00 +00:00
Daniel Dunbar b2cd66bf4d Driver: Sink Driver/Compilation into clang::driver namespace.
- Add OptTable instance to Driver.

llvm-svn: 66063
2009-03-04 20:49:20 +00:00
Daniel Dunbar 3e2cbc3161 Driver: Add ArgList implementation.
llvm-svn: 66037
2009-03-04 17:10:42 +00:00
Daniel Dunbar 5637208a88 Driver: More Option implementation.
- Add Options.def file, collects option information.

 - Actual option instantiation is handled lazily by OptTable to allow
   the driver to not need to instantiate all options.

 - cast<> support for Option, other minor tweaks.

llvm-svn: 66028
2009-03-04 08:33:23 +00:00
Daniel Dunbar b2da933989 Sketch Driver Option classes.
llvm-svn: 65933
2009-03-03 05:55:11 +00:00
Daniel Dunbar 544ecd14b6 Stub out some structure for C++ driver.
llvm-svn: 65867
2009-03-02 19:59:07 +00:00
Daniel Dunbar 51adf5824e Rename lib/Driver (etc) to lib/Frontend in prep for the *actual*
driver taking lib/Driver.

llvm-svn: 65811
2009-03-02 06:16:29 +00:00
Douglas Gregor 87f95b0a6a Introduce code modification hints into the diagnostics system. When we
know how to recover from an error, we can attach a hint to the
diagnostic that states how to modify the code, which can be one of:

  - Insert some new code (a text string) at a particular source
    location
  - Remove the code within a given range
  - Replace the code within a given range with some new code (a text
    string)

Right now, we use these hints to annotate diagnostic information. For
example, if one uses the '>>' in a template argument in C++98, as in
this code:

  template<int I> class B { };
  B<1000 >> 2> *b1;

we'll warn that the behavior will change in C++0x. The fix is to
insert parenthese, so we use code insertion annotations to illustrate
where the parentheses go:

test.cpp:10:10: warning: use of right-shift operator ('>>') in template
argument will require parentheses in C++0x
  B<1000 >> 2> *b1;
         ^
    (        )


Use of these annotations is partially implemented for HTML
diagnostics, but it's not (yet) producing valid HTML, which may be
related to PR2386, so it has been #if 0'd out.

In this future, we could consider hooking this mechanism up to the
rewriter to actually try to fix these problems during compilation (or,
after a compilation whose only errors have fixes). For now, however, I
suggest that we use these code modification hints whenever we can, so
that we get better diagnostics now and will have better coverage when
we find better ways to use this information.

This also fixes PR3410 by placing the complaint about missing tokens
just after the previous token (rather than at the location of the next
token).

llvm-svn: 65570
2009-02-26 21:00:50 +00:00
Chris Lattner d92f1bfa11 add c++ search path for GCC 4.2, PR3668, patch by Pawel Worach!
llvm-svn: 65462
2009-02-25 18:06:37 +00:00
Chris Lattner 464ceb4ec8 map source ranges through macro expansions. Before:
t.m:5:2: error: invalid operands to binary expression ('typeof(P)' (aka 'struct mystruct') and 'typeof(F)' (aka 'float'))
 MAX(P, F);
 ^~~~~~~~~
t.m:1:78: note: instantiated from:
#define MAX(A,B)    ({ __typeof__(A) __a = (A); __typeof__(B) __b = (B); __a < __b ? __b : __a; })
                                                                             ^

(no ranges on the second diagnostics)

After:

t.m:5:2: error: invalid operands to binary expression ('typeof(P)' (aka 'struct mystruct') and 'typeof(F)' (aka 'float'))
 MAX(P, F);
 ^~~~~~~~~
t.m:1:78: note: instantiated from:
#define MAX(A,B)    ({ __typeof__(A) __a = (A); __typeof__(B) __b = (B); __a < __b ? __b : __a; })
                                                                         ~~~ ^ ~~~

(ranges!)

llvm-svn: 65090
2009-02-20 00:25:28 +00:00
Chris Lattner 1973d84625 refactor, pass ranges down instead of the whole
DiagnosticInfo.

llvm-svn: 65088
2009-02-20 00:18:51 +00:00
Chris Lattner 06ef388a61 fix a bug introduced in my previous patch: moving clang headers to the
"after" group instead of the system group makes it so #include <limits.h>
picks up the *system* limits.h file before clang's.  This causes a failure
on linux and is definitely not what we want.

llvm-svn: 65026
2009-02-19 06:48:28 +00:00
Chris Lattner 45d26bd00d PR3614: "ignoring nonexistent directory" should print the -isysroot
mapped path, not the requested path.

llvm-svn: 65009
2009-02-19 04:48:57 +00:00
Ted Kremenek ea3a9e270c HTMLDiagnostics: Always display diagnostics *below* the line in question.
llvm-svn: 64959
2009-02-18 22:10:00 +00:00
Chris Lattner 24eb28bcf8 tidy up
llvm-svn: 64934
2009-02-18 18:50:45 +00:00
Chris Lattner 970f245439 stop searching GCC install directories for standard C headers (but
keep searching for C++ headers when in C++ mode).  In theory clang
should be able to find all of its own headers now.  If not, the
CPATH or C_INCLUDE_PATH environment variables can be specified to
add a include path.

llvm-svn: 64862
2009-02-18 00:25:15 +00:00
Ben Laurie 54a06ce437 Handle fatal errors.
llvm-svn: 64770
2009-02-17 17:32:22 +00:00
Chris Lattner 7b60a164b1 As an experimental hack, emit "instantiated from" information in
diagnostics.  I'm not sure I want to keep this, but hey, it's easy
and could be useful or something, even if guarded by a 
-fshow-me-tons-of-details option.  A silly example is:

#define A B
#define C A
#define D C

int y = D;

We now emit:

t.c:11:9: error: use of undeclared identifier 'B'
int y = D;
        ^
t.c:9:11: note: instantiated from:
#define D C
          ^
t.c:8:11: note: instantiated from:
#define C A
          ^
t.c:7:11: note: instantiated from:
#define A B
          ^

A more useful example is from tgmath:

t.c:4:9: error: no matching function for call to '__tg_acos'
 return acos(x);
        ^~~~~~~
/Users/sabre/llvm/Debug/Headers/tgmath-sofar.h:51:17: note: instantiated from:
#define acos(x) __tg_acos(x)
                ^
... candidate set follows ...

This does not yet print ranges in instantiation info, (e.g. highlighting the
range "__tg_acos(x)" in the last example), but that could be added if we 
decide this is a good idea :).

Thoughts and bug reports welcome!

llvm-svn: 64761
2009-02-17 08:44:50 +00:00
Chris Lattner 5abfe97bf1 sink a call to getInstantiationLoc to eliminate an assertion.
llvm-svn: 64755
2009-02-17 07:54:55 +00:00
Chris Lattner d22603cef0 break down EmitCaretDiagnostic to use more primitive calls.
llvm-svn: 64754
2009-02-17 07:51:53 +00:00
Chris Lattner 2cf68c1e96 split caret diagnostic printing out into its own function.
llvm-svn: 64751
2009-02-17 07:38:37 +00:00
Chris Lattner 11a2a433b2 simplify some code.
llvm-svn: 64750
2009-02-17 07:34:34 +00:00
Chris Lattner b42700f555 If a source range comes through a function-like macro expansion,
highlight the arguments to the macro as well as the identifier.

Before:

t.c:3:9: error: no matching function for call to '__tg_acos'; candidates are:
 return acos(x);
        ^~~~

after:

t.c:3:9: error: no matching function for call to '__tg_acos'; candidates are:
 return acos(x);
        ^~~~~~~

llvm-svn: 64743
2009-02-17 05:19:10 +00:00
Chris Lattner 24c911e25a use some references to simplify code.
llvm-svn: 64063
2009-02-08 01:00:10 +00:00
Chris Lattner bf20a9a57d Genericize the existing logic for removing duplicate header dirs to apply
the "system dirs win over user dirs" logic to framework and headermap
search locations as well as normal directories.  This means that
clang t.m -F/System/Library/Frameworks  will treat /System/Library/Frameworks
as a system directory not a user directory.  If you use -v, the difference is:

Before:
ignoring nonexistent directory "/usr/libdata/gcc41"
ignoring duplicate framework "/System/Library/Frameworks"
#include "..." search starts here:
#include <...> search starts here:

After:
ignoring nonexistent directory "/usr/libdata/gcc41"
ignoring duplicate directory "/System/Library/Frameworks"
  as it is a non-system directory that duplicates a system directory
#include "..." search starts here:
#include <...> search starts here:

This fixes rdar://6566429.

llvm-svn: 64060
2009-02-08 00:55:22 +00:00
Chris Lattner b05f49e7fd handle fatal errors, rely on warnings to point out missing cases.
llvm-svn: 63913
2009-02-06 03:57:44 +00:00
Torok Edwin c6853c1531 Add Debian gcc 4.3 header search directories.
llvm-svn: 63872
2009-02-05 18:12:45 +00:00
Chris Lattner 88ea93e6b4 lower the interface to getLineNumber like we did for
getColumnNumber.  This fixes a FIXME in 
SourceManager::getPresumedLoc because we now just decompose
the sloc once.

llvm-svn: 63701
2009-02-04 01:06:56 +00:00
Chris Lattner e4ad417664 make SM::getColumnNumber take a predecomposed FileID/offset, which
makes it clear to clients that they have to pick an instantiation
or spelling location before calling it and allows optimization based
on that.

llvm-svn: 63698
2009-02-04 00:55:58 +00:00
Ted Kremenek e9aee88eed Clean up indentation.
llvm-svn: 63551
2009-02-02 21:45:32 +00:00
Chris Lattner 1958677ccf " Attached is a patch for TextDiagnosticPrinter that adds an optional
parameter that allows users to omit the printing of the source
location on a diagnostic. So basically it would omit the "abc.c:5:1: "
at the beginning of the line."

Patch by Alexei Svitkine!

llvm-svn: 63396
2009-01-30 17:41:53 +00:00
Ted Kremenek 5241832d1d Fix TextDiagnosticPrinter::HandleDiagnostic to handle invalid FullSourceLocs that do not have a SourceManager.
llvm-svn: 63230
2009-01-28 20:47:47 +00:00
Chris Lattner f1ca7d3e02 Introduce a new PresumedLoc class to represent the concept of a location
as reported to the user and as manipulated by #line.  This is what __FILE__,
__INCLUDE_LEVEL__, diagnostics and other things should follow (but not 
dependency generation!).  

This patch also includes several cleanups along the way: 

- SourceLocation now has a dump method, and several other places 
  that did similar things now use it.
- I cleaned up some code in AnalysisConsumer, but it should probably be
  simplified further now that NamedDecl is better.
- TextDiagnosticPrinter is now simplified and cleaned up a bit.

This patch is a prerequisite for #line, but does not actually provide 
any #line functionality.

llvm-svn: 63098
2009-01-27 07:57:44 +00:00
Ted Kremenek a3f462e49a PathDiagnostics:
- Add the distinction between the 'bug type' and the 'bug description'

HTMLDiagnostics:
- Output the bug type field as HTML comments

scan-build:
- Use the bug type field instead of the bug description for the HTML table.
- Radar filing now automatically picks up the bug description in the title (addresses <rdar://problem/6265970>)

llvm-svn: 63084
2009-01-27 01:53:39 +00:00
Ted Kremenek 099243aa9e When using -analyzer-output-plist always output a plist file even if it contains no error reports.
llvm-svn: 62871
2009-01-23 20:06:20 +00:00
Ted Kremenek 13747167ca Static Analyzer: When generating plists for errors reports, generate one plist file per translation unit that contains all of the diagnostics.
llvm-svn: 62647
2009-01-21 00:42:24 +00:00
Chris Lattner cbc35ecb04 Rename SourceManager::getCanonicalFileID -> getFileID. There is
no longer such thing as a non-canonical FileID.

llvm-svn: 62499
2009-01-19 07:46:45 +00:00
Chris Lattner 71dc14b9f0 Rename SourceLocation::getFileID to getChunkID, because it returns
the chunk ID not the file ID.  This exposes problems in 
TextDiagnosticPrinter where it should have been using the canonical
file ID but wasn't.  Fix these along the way.

llvm-svn: 62427
2009-01-17 08:45:21 +00:00
Chris Lattner d32480d3db this massive patch introduces a simple new abstraction: it makes
"FileID" a concept that is now enforced by the compiler's type checker
instead of yet-another-random-unsigned floating around.

This is an important distinction from the "FileID" currently tracked by
SourceLocation.  *That* FileID may refer to the start of a file or to a
chunk within it.  The new FileID *only* refers to the file (and its 
#include stack and eventually #line data), it cannot refer to a chunk.

FileID is a completely opaque datatype to all clients, only SourceManager
is allowed to poke and prod it.

llvm-svn: 62407
2009-01-17 06:22:33 +00:00
Chris Lattner 48a8c57936 eliminate FullSourceLoc::getLocation() now that FullSourceLoc
*is* the location.  This eliminates some weird X.getLocation().getLocation()'s.

llvm-svn: 62376
2009-01-16 23:06:35 +00:00
Chris Lattner fcc0a5a3f7 elimiante FullSourceLoc::getCanonicalFileID
llvm-svn: 62374
2009-01-16 22:59:51 +00:00
Chris Lattner 671689a440 an instantiation loc is always a file loc.
llvm-svn: 62370
2009-01-16 22:53:27 +00:00
Chris Lattner 8a42586c54 more SourceLocation lexicon change: instead of referring to the
"logical" location, refer to the "instantiation" location.

llvm-svn: 62316
2009-01-16 07:36:28 +00:00
Zhongxing Xu 4c1661102e Add Fedora 10 GCC paths.
llvm-svn: 61429
2008-12-25 09:28:01 +00:00
Nuno Lopes cbab7f6b29 add missing gentoo c++ include paths
llvm-svn: 60655
2008-12-07 12:11:37 +00:00
Eli Friedman 79ceb0947b Minor update to CMake build system.
llvm-svn: 60269
2008-11-30 01:46:21 +00:00
Zhongxing Xu 2d311e8354 Add license comments.
llvm-svn: 60144
2008-11-27 02:19:10 +00:00
Zhongxing Xu 16e3f0e03f Add support for pluggable components of static analyzer.
- Creator function pointers are saved in ManagerRegistry.
 - The Register* class is used to notify ManagerRegistry new module is 
   available.
 - AnalysisManager queries ManagerRegistry for configurable module. Then it
   passes them to GRExprEngine, in turn to GRStateManager.

llvm-svn: 60143
2008-11-27 01:55:08 +00:00
Chris Lattner bd414e34c2 remove a dead enum
llvm-svn: 59879
2008-11-22 20:47:38 +00:00
Chris Lattner 327984f4c4 switch TextDiagnosticPrinter to raw_ostream.
llvm-svn: 59597
2008-11-19 06:56:25 +00:00
Chris Lattner 23be067407 rewrite FormatDiagnostic to be less gross and a lot more efficient.
This also makes it illegal to have bare '%'s in diagnostics.  If you
want a % in a diagnostic, use %%.

llvm-svn: 59596
2008-11-19 06:51:40 +00:00
Chris Lattner 8488c8297c This reworks some of the Diagnostic interfaces a bit to change how diagnostics
are formed.  In particular, a diagnostic with all its strings and ranges is now
packaged up and sent to DiagnosticClients as a DiagnosticInfo instead of as a 
ton of random stuff.  This has the benefit of simplifying the interface, making
it more extensible, and allowing us to do more checking for things like access
past the end of the various arrays passed in.

In addition to introducing DiagnosticInfo, this also substantially changes how 
Diagnostic::Report works.  Instead of being passed in all of the info required
to issue a diagnostic, Report now takes only the required info (a location and 
ID) and returns a fresh DiagnosticInfo *by value*.  The caller is then free to
stuff strings and ranges into the DiagnosticInfo with the << operator.  When
the dtor runs on the DiagnosticInfo object (which should happen at the end of
the statement), the diagnostic is actually emitted with all of the accumulated
information.  This is a somewhat tricky dance, but it means that the 
accumulated DiagnosticInfo is allowed to keep pointers to other expression 
temporaries without those pointers getting invalidated.

This is just the minimal change to get this stuff working, but this will allow
us to eliminate the zillions of variant "Diag" methods scattered throughout
(e.g.) sema.  For example, instead of calling:

  Diag(BuiltinLoc, diag::err_overload_no_match, typeNames,
       SourceRange(BuiltinLoc, RParenLoc));

We will soon be able to just do:

  Diag(BuiltinLoc, diag::err_overload_no_match)
      << typeNames << SourceRange(BuiltinLoc, RParenLoc));

This scales better to support arbitrary types being passed in (not just 
strings) in a type-safe way.  Go operator overloading?!

llvm-svn: 59502
2008-11-18 07:04:44 +00:00
Chris Lattner 16ba91396a Change the diagnostics interface to take an array of pointers to
strings instead of array of strings.  This reduces string copying
in some not-very-important cases, but paves the way for future 
improvements.

llvm-svn: 59494
2008-11-18 04:56:44 +00:00
Daniel Dunbar f3502dbc14 [LLVM up] Update for raw_fd_ostream change. This fixes a FIXME that
the Backend output should be done in binary mode.
 - I'd appreciate it if someone who has a Windows build could verify
   this.

llvm-svn: 59221
2008-11-13 05:09:21 +00:00
Cedric Venet 0ce19ba350 Update CMakeLists.txt
llvm-svn: 58716
2008-11-04 20:31:17 +00:00
Ted Kremenek 14f18653f6 Hook up the Plist diagnostic client to the driver.
Fix Plist output.

llvm-svn: 58652
2008-11-03 23:18:07 +00:00
Ted Kremenek 0cbd963817 Add path diagnostics client for emitting path reports using Plists.
llvm-svn: 58647
2008-11-03 22:33:57 +00:00
Ted Kremenek e868c00d5a Rename 'HTMLDiagnostics.h' to 'PathDiagnosticClients.h'
llvm-svn: 58646
2008-11-03 22:31:48 +00:00
Ted Kremenek 29925c8ea2 Fixed a horrible bug in HTMLDiagnostics.cpp where bugs referencing source ranges that occur within macros would not be emitted at all.
llvm-svn: 58550
2008-11-02 00:33:58 +00:00
Chris Lattner 66a740e66e Rename Characteristic_t to CharacteristicKind
llvm-svn: 58224
2008-10-27 01:19:25 +00:00
Oscar Fuentes 07d9f9a6ec CMake: Builds and installs clang binary and libs (no docs yet). It
must be under the `tools' subdirectory of the LLVM *source* tree.

llvm-svn: 58180
2008-10-26 00:56:18 +00:00
Ted Kremenek 8d8a14a3fc Expand bubble size by 50%.
llvm-svn: 58111
2008-10-24 21:17:16 +00:00
Douglas Gregor 39c16d445e First non-embarrassing cut at checking for ambiguous derived-to-base
conversions.

Added PerformImplicitConversion, which follows an implicit conversion sequence
computed by TryCopyInitialization and actually performs the implicit
conversions, including the extra check for ambiguity mentioned above.

llvm-svn: 58071
2008-10-24 04:54:22 +00:00
Daniel Dunbar 3ca0a634c2 Bug fix, CPATH="" does not add '.' to search path.
llvm-svn: 57072
2008-10-04 20:58:18 +00:00
Chris Lattner b03dc76499 clean up a bunch of fixme's I added, by moving
DirectoryLookup::DirType into SourceManager.h

llvm-svn: 56692
2008-09-26 21:18:42 +00:00
Chris Lattner e744d32b72 emulate a bit of GCC path lookup weirdness: if a system
directory is shadowed by a user directory in the lookup
path, ignore the user directory not the system one.  Not
doing this can affect file lookup and the "is a system
header" bit on locations.  For example:
  clang -v -I/usr/include inc.c -E | & grep /usr/inc
now prints:

# 1 "/usr/include/i386/_types.h" 1 3 4
# 37 "/usr/include/i386/_types.h" 3 4
# 70 "/usr/include/i386/_types.h" 3 4

instead of:

# 1 "/usr/include/i386/_types.h" 1
# 37 "/usr/include/i386/_types.h"
# 70 "/usr/include/i386/_types.h"

This is part of rdar://6243860.

llvm-svn: 56669
2008-09-26 17:46:45 +00:00
Ted Kremenek b76a3f44ec Output "REPORTHEADER" and "REPORTSUMMARYEXTRA" tags for use with scan-view.
llvm-svn: 56440
2008-09-22 17:33:32 +00:00
Ted Kremenek 80b2b16540 Added experimental "intelligent-sizing" of HTML message bubbles based on the contents of the message.
llvm-svn: 56400
2008-09-21 18:52:59 +00:00
Ted Kremenek de195e2100 Add "category" to BugTypes, allowing bugs to be grouped.
Changed casing of many bug names.  The convention will be to have bug names (mostly) lower cased, and categories use some capitalization.

llvm-svn: 56385
2008-09-20 04:23:38 +00:00
Ted Kremenek 2d470fc0ba Patch by Csaba Hruska!
"Here is a patch what replaces std::ostream with llvm::raw_ostream. This patch
covers the AST library, but ignores Analysis lib."

llvm-svn: 56185
2008-09-13 05:16:45 +00:00
Douglas Gregor e972aa471d Add support for expected-note to Clang's -verify option
llvm-svn: 56089
2008-09-11 02:46:36 +00:00
Argyrios Kyrtzidis 971dd236f0 Set different header search paths for the Windows platform.
llvm-svn: 55832
2008-09-05 09:41:20 +00:00
Argyrios Kyrtzidis 624cab87dc Add header search paths for Mingw32 (GCC version 4).
llvm-svn: 55830
2008-09-05 09:03:53 +00:00
Zhongxing Xu 9470a96b18 Moved HTMLDiagnostics to lib/Driver.
llvm-svn: 55274
2008-08-24 02:33:36 +00:00
Chris Lattner 22a4aee8e3 Add header search paths for dragonfly, patch by Sascha Wildner!
llvm-svn: 55242
2008-08-23 18:25:07 +00:00
Nico Weber ed9b4100a8 Move most of HeaderSearch initialization to libDriver.
For example, adding the default system include paths in clients is now as
simple as

  InitHeaderSearch init(headers);
  init.AddDefaultSystemIncludePaths(langopts);
  init.Realize();

llvm-svn: 55174
2008-08-22 09:25:22 +00:00
Daniel Dunbar 56fdb6ae69 More #include cleaning
- Kill unnecessary #includes in .cpp files. This is an automatic
   sweep so some things removed are actually used, but happen to be
   included by a previous header. I tried to get rid of the obvious
   examples and this was the easiest way to trim the #includes in one
   fell swoop.
 - We now return to regularly scheduled development.

llvm-svn: 54632
2008-08-11 06:23:49 +00:00
Nico Weber 4c3116437c * Remove isInSystemHeader() from DiagClient, move it to SourceManager
* Move FormatError() from TextDiagnostic up to DiagClient, remove now  
  empty class TextDiagnostic
* Make DiagClient optional for Diagnostic

This fixes the following problems:

* -html-diags (and probably others) does now output the same set of  
  warnings as console clang does
* nothing crashes if one forgets to call setHeaderSearch() on  
  TextDiagnostic
* some code duplication is removed

llvm-svn: 54620
2008-08-10 19:59:06 +00:00
Gordon Henriksen 04c50bd7e0 Expressive diagnostics-- worth their weight in gold?
(Fixing a spelling error.)

llvm-svn: 54591
2008-08-09 19:58:22 +00:00
Nico Weber b5fc3c300a add a libDriver, for now only move the text diangostics stuff from Driver to there
llvm-svn: 54383
2008-08-05 23:33:20 +00:00