--===============1193708788158643098== Content-type: multipart/alternative; boundary="Apple-Mail=_BAC038E3-6166-4A8A-BE0D-43B12EE79D20" --Apple-Mail=_BAC038E3-6166-4A8A-BE0D-43B12EE79D20 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=utf-8 Richard, thanks for getting back to me! The fix you proposed resolved the bug = for me =E2=80=93 and removing the code you said was redundant also = worked fine. Sean > On Jul 29, 2015, at 5:36 PM, Richard Smith = wrote: >=20 > On Wed, Jul 29, 2015 at 5:35 PM, Richard Smith > wrote: > On Wed, Jul 29, 2015 at 10:43 AM, Sean Callanan > wrote: > LLDB=E2=80=99s module support (implemented here: = http://llvm.org/svn/llvm-project/lldb/trunk/source/Expression/ClangModules= DeclVendor.cpp = ) sets up its own CompilerInstance and = then loads modules into it. >=20 > The way we import macros from modules into expressions is by textual = inclusion =E2=80=93 we iterate across the macros like this: >=20 > =E2=80=93 > if (m_compiler_instance->getPreprocessor().getExternalSource()) > { > = m_compiler_instance->getPreprocessor().getExternalSource()->ReadDefinedMac= ros(); >=20 > FYI, this is redundant; macro_begin does this for you. > =20 > } >=20 >=20 > for (clang::Preprocessor::macro_iterator mi =3D = m_compiler_instance->getPreprocessor().macro_begin(), > me =3D = m_compiler_instance->getPreprocessor().macro_end(); > mi !=3D me; ++mi) > { > // ... > clang::MacroInfo *macro_info =3D nullptr; > =20 > for (clang::ModuleMacro *module_macro : = m_compiler_instance->getPreprocessor().getLeafModuleMacros(ii)) > { > // pick the macro_info from the module we care most about; that = might be NULL > } > =20 > if (macro_info) > { > // make a string from the macro > } > } > =E2=80=93 >=20 > What Im noticing is that a macro (say, =E2=80=9CMAX=E2=80=9D) = doesn=E2=80=99t appear in the macro_begin() list at all. Only later, = after I=E2=80=99ve done a name lookup for =E2=80=9CMAX" (on the = assumption that it might be a variable, see = ClangModulesDeclVendorImpl::FindDecls()), does it appear in the list. >=20 > Is there something else I need to tickle here, or is this a bug in the = API? >=20 > Does this help: >=20 > Index: lib/Serialization/ASTReader.cpp > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > --- lib/Serialization/ASTReader.cpp (revision 243368) > +++ lib/Serialization/ASTReader.cpp (working copy) > @@ -1623,7 +1623,7 @@ >=20 > case PP_MACRO_OBJECT_LIKE: > case PP_MACRO_FUNCTION_LIKE: > - getLocalIdentifier(**I, Record[0]); > + updateOutOfDateIdentifier(*getLocalIdentifier(**I, = Record[0])); > break; >=20 > case PP_TOKEN: >=20 >=20 --Apple-Mail=_BAC038E3-6166-4A8A-BE0D-43B12EE79D20 Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset=utf-8 Richard,

thanks for getting back to me!  The fix you proposed = resolved the bug for me =E2=80=93 and removing the code you said was = redundant also worked fine.

Sean

On = Jul 29, 2015, at 5:36 PM, Richard Smith <richard@metafoo.co.uk> wrote:

On Wed, = Jul 29, 2015 at 5:35 PM, Richard Smith <richard@metafoo.co.uk> wrote:
On Wed, Jul 29, 2015 at 10:43 AM, Sean Callanan <scallanan@apple.com> = wrote:
LLDB=E2=80=99s module support = (implemented here: http://llvm.org/svn/llvm-project/lldb/trunk/source/Expression/C= langModulesDeclVendor.cpp) sets up its own CompilerInstance and then = loads modules into it.

The way we import macros from modules into expressions is by = textual inclusion =E2=80=93 we iterate across the macros like = this:

=E2=80=93
if (m_compiler_instance->getPreprocessor().getExternalSource())
{
  m_compiler_instance->getPreprocessor().getExternalSource()->ReadDefinedMacros();

FYI, this is redundant; macro_begin does this for = you.
 
}


for (clang::Preprocessor::macro_iterator mi =3D = m_compiler_instance->getPreprocessor().macro_begin(),
                =                     =      me =3D m_compiler_instance->getPreprocessor().macro_end();
     mi !=3D me; ++mi)
{
  // ...
  clang::MacroInfo *macro_info =3D = nullptr;
        
  for= (clang::ModuleMacro *module_macro : = m_compiler_instance->getPreprocessor().getLeafModuleMacros(ii))
  {
    // pick the macro_info from the module we care most about; = that might be NULL
  }
        
  if = (macro_info)
  {
    // make a string from the macro
  }
}
=E2=80=93

What Im noticing is that = a macro (say, =E2=80=9CMAX=E2=80=9D) doesn=E2=80=99t appear in = the macro_begin() list = at all.  Only later, after I=E2=80=99ve done a name lookup for = =E2=80=9CMAX" (on the assumption that it might be a variable, = see ClangModulesDeclVendorImpl::FindDecls()), does = it appear in the list.

Is there something else I need to tickle here, or is this a = bug in the API?

Does this help:

Index: = lib/Serialization/ASTReader.cpp
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- lib/Serialization/ASTReader.cpp     (revision = 243368)
+++ lib/Serialization/ASTReader.cpp   =   (working copy)
@@ -1623,7 +1623,7 = @@

  =        case PP_MACRO_OBJECT_LIKE:
         case = PP_MACRO_FUNCTION_LIKE:
-       =    getLocalIdentifier(**I, Record[0]);
+ =         =  updateOutOfDateIdentifier(*getLocalIdentifier(**I, = Record[0]));
          =  break;

         case = PP_TOKEN:



= --Apple-Mail=_BAC038E3-6166-4A8A-BE0D-43B12EE79D20-- --===============1193708788158643098== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ cfe-dev mailing list cfe-dev@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev --===============1193708788158643098==--