r252114 - [modules] If we're given a module file, via -fmodule-file=, for a module, but

Adrian Prantl via cfe-commits cfe-commits at lists.llvm.org
Fri Jan 8 14:46:49 PST 2016


> On Jan 8, 2016, at 2:39 PM, Adrian Prantl <aprantl at apple.com> wrote:
> 
> Hi Richard,
> 
> This change 
>> @@ -2239,16 +2240,21 @@ ASTReader::ReadControlBlock(ModuleFile &F,
> [...]
>> -          if (!DisableValidation && Result != Success &&
>> -              (Result != ConfigurationMismatch || !AllowConfigurationMismatch))
>> +          if (DisableValidation ||
>> +              (AllowConfigurationMismatch && Result == ConfigurationMismatch))
>> +            Result = Success;
>> +
>> +          // If we've diagnosed a problem, we're done.
>> +          if (Result != Success &&
>> +              isDiagnosedResult(Result, ClientLoadCapabilities))
>>             return Result;
> 
> either causes or uncovers a bug:
> 
>> CC=/Volumes/Data/llvm/_build.ninja.debug/bin/clang # r256948
>> rm -rf cache && mkdir cache
>> rm -rf Test && mkdir Test
>> echo 'module Test {
>>  umbrella header "Test.h"
>> }' >Test/module.modulemap
>> touch Test/Test.h
>> echo '#import <Test/Test.h>'>2.m
>> 
>> clang -x objective-c -fmodules -fmodules-cache-path=cache  -DA=0 -I. -c 2.m -o 1.o
>> clang -x objective-c -fmodules -fmodules-cache-path=cache -Werror -DA=0 -I. -c 2.m -o 2.o
>> 
> 
> 
> After encountering a configuration mismatch or out-of-date error, we now continue instead of returning early and subsequently crash in
> 
>  ASTReader::ReadControlBlock()
>    ASTReader::getInputFile()
>      Cursor.JumpToBit(F.InputFileOffsets[ID-1]);
> 
> I’ll keep digging deeper, but I thought you may have an intuition of what’s going on here.
> Is the behavior change intentional? From the commit message it sounds as if implicit module builds shouldn’t be affected.

In my particular crash isDiagnosedResult returns false for an OutOfDate result thus skipping the early return.

-- adrian


More information about the cfe-commits mailing list